<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Object-oriented programming</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Object-oriented_programming"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Object-oriented_programming rootpage-Object-oriented_programming skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Object-oriented programming</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p class="mw-empty-elt">
</p>
<p><b>Object-oriented programming</b> (<b>OOP</b>) is a <a href="Programming_paradigm" title="Programming paradigm">programming paradigm</a> based on the <a href="Object_(computer_science)" title="Object (computer science)">object</a><sup id="cite_ref-alanKayOnOO_1-0" class="reference"><a href="#cite_note-alanKayOnOO-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> – a <a href="Software" title="Software">software</a> entity that <a href="Encapsulation_(programming)" class="mw-redirect" title="Encapsulation (programming)">encapsulates</a> <a href="Data" title="Data">data</a> and <a href="Function_(computer_programming)" title="Function (computer programming)">function(s)</a>. An OOP <a href="Computer_program" title="Computer program">computer program</a> consists of objects that interact with one another.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> A <a href="Programming_language" title="Programming language">programming language</a> that provides OOP features is classified as an <i>OOP language</i> but as the set of features that contribute to OOP is contended, classifying a language as OOP and the degree to which it supports or is OOP, are debatable. As paradigms are not mutually exclusive, a language can be <a href="Multi-paradigm" class="mw-redirect" title="Multi-paradigm">multi-paradigm</a>; can be categorized as more than only OOP.
</p><p>Sometimes, objects represent real-world things and processes in digital form.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> For example, a graphics program may have objects such as <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">circle</code>, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">square</code>, and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">menu</code>. An online shopping system might have objects such as <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">shopping cart</code>, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">customer</code>, and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">product</code>. <a href="Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a> said, "This paradigm [OOP] closely reflects the structure of systems in the real world and is therefore well suited to model complex systems with complex behavior".<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>However, more often, objects represent abstract entities, like an open file or a unit converter. Not everyone agrees that OOP makes it easy to copy the real world exactly or that doing so is even necessary. <a href="Robert_C._Martin" title="Robert C. Martin">Bob Martin</a> suggests that because classes are software, their relationships don't match the real-world relationships they represent.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> <a href="Bertrand_Meyer" title="Bertrand Meyer">Bertrand Meyer</a> argues that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed".<sup id="cite_ref-FOOTNOTEMeyer1997230_7-0" class="reference"><a href="#cite_note-FOOTNOTEMeyer1997230-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> <a href="Steve_Yegge" title="Steve Yegge">Steve Yegge</a> noted that <a href="Natural_language" title="Natural language">natural languages</a> lack the OOP approach of naming a thing (object) before an action (method), as opposed to <a href="Functional_programming" title="Functional programming">functional programming</a> which does the reverse.<sup id="cite_ref-executioniKoN_8-0" class="reference"><a href="#cite_note-executioniKoN-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> This can make an OOP solution more complex than one written via <a href="Procedural_programming" title="Procedural programming">procedural programming</a>.<sup id="cite_ref-executioniKoN2_9-0" class="reference"><a href="#cite_note-executioniKoN2-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>Notable languages with OOP support include <a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a>, <a href="ActionScript" title="ActionScript">ActionScript</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="Common_Lisp" title="Common Lisp">Common Lisp</a>, <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, <a href="Dart_(programming_language)" title="Dart (programming language)">Dart</a>, <a href="Eiffel_(programming_language)" title="Eiffel (programming language)">Eiffel</a>, <a href="Fortran" title="Fortran">Fortran</a> 2003, <a href="Haxe" title="Haxe">Haxe</a>, <a href="Java_(programming_language)" title="Java (programming language)">Java</a>,<sup id="cite_ref-FOOTNOTEBloch2018xi–xiiForeword_10-0" class="reference"><a href="#cite_note-FOOTNOTEBloch2018xi–xiiForeword-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> <a href="JavaScript" title="JavaScript">JavaScript</a>, <a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>, <a href="Logo_(programming_language)" title="Logo (programming language)">Logo</a>, <a href="MATLAB" title="MATLAB">MATLAB</a>, <a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="Object_Pascal" title="Object Pascal">Object Pascal</a>, <a href="Perl" title="Perl">Perl</a>, <a href="PHP" title="PHP">PHP</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="R_(programming_language)" title="R (programming language)">R</a>, <a href="Raku_(programming_language)" title="Raku (programming language)">Raku</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a>, <a href="SIMSCRIPT" title="SIMSCRIPT">SIMSCRIPT</a>, <a href="Simula" title="Simula">Simula</a>, <a href="Smalltalk" title="Smalltalk">Smalltalk</a>, <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>, <a href="Vala_(programming_language)" title="Vala (programming language)">Vala</a> and <a href="Visual_Basic_(.NET)" title="Visual Basic (.NET)">Visual Basic (.NET)</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>The idea of "objects" in programming began with the <a href="Artificial_intelligence" title="Artificial intelligence">artificial intelligence</a> group at <a href="Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> (MIT) in the late 1950s and early 1960s. Here, "object" referred to <a href="Lisp_(programming_language)" title="Lisp (programming language)">LISP</a> atoms with identified properties (attributes).<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
Another early example was <a href="Sketchpad" title="Sketchpad">Sketchpad</a> created by <a href="Ivan_Sutherland" title="Ivan Sutherland">Ivan Sutherland</a> at MIT in 1960–1961. In the glossary of his technical report, Sutherland defined terms like "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Later, in 1968, AED-0, MIT's version of the <a href="ALGOL" title="ALGOL">ALGOL</a> programming language, connected data structures ("plexes") and procedures, prefiguring what were later termed "messages", "methods", and "member functions".<sup id="cite_ref-simuladev_14-0" class="reference"><a href="#cite_note-simuladev-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
Topics such as <a href="Data_abstraction" class="mw-redirect" title="Data abstraction">data abstraction</a> and <a href="Modular_programming" title="Modular programming">modular programming</a> were common points of discussion at this time.
</p><p>Meanwhile, in Norway, <a href="Simula" title="Simula">Simula</a> was developed during the years 1961–1967.<sup id="cite_ref-simuladev_14-1" class="reference"><a href="#cite_note-simuladev-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Simula introduced essential object-oriented ideas, such as <a href="Class_(computer_programming)" title="Class (computer programming)">classes</a>, inheritance, and <a href="Dynamic_binding_(computing)" class="mw-redirect" title="Dynamic binding (computing)">dynamic binding</a>.<sup id="cite_ref-auto_16-0" class="reference"><a href="#cite_note-auto-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
Simula was used mainly by researchers involved with <a href="Physical_modelling" class="mw-redirect" title="Physical modelling">physical modelling</a>, like the movement of ships and their content through cargo ports.<sup id="cite_ref-auto_16-1" class="reference"><a href="#cite_note-auto-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Simula is generally accepted as being the first language with the primary features and framework of an object-oriented language.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<style data-mw-deduplicate="TemplateStyles:r1224211176">
/* start https://en.wikipedia.org/ */
.mw-parser-output .quotebox{background-color:#F9F9F9;border:1px solid #aaa;box-sizing:border-box;padding:10px;font-size:88%;max-width:100%}.mw-parser-output .quotebox.floatleft{margin:.5em 1.4em .8em 0}.mw-parser-output .quotebox.floatright{margin:.5em 0 .8em 1.4em}.mw-parser-output .quotebox.centered{overflow:hidden;position:relative;margin:.5em auto .8em auto}.mw-parser-output .quotebox.floatleft span,.mw-parser-output .quotebox.floatright span{font-style:inherit}.mw-parser-output .quotebox>blockquote{margin:0;padding:0;border-left:0;font-family:inherit;font-size:inherit}.mw-parser-output .quotebox-title{text-align:center;font-size:110%;font-weight:bold}.mw-parser-output .quotebox-quote>:first-child{margin-top:0}.mw-parser-output .quotebox-quote:last-child>:last-child{margin-bottom:0}.mw-parser-output .quotebox-quote.quoted:before{font-family:"Times New Roman",serif;font-weight:bold;font-size:large;color:gray;content:" “ ";vertical-align:-45%;line-height:0}.mw-parser-output .quotebox-quote.quoted:after{font-family:"Times New Roman",serif;font-weight:bold;font-size:large;color:gray;content:" ” ";line-height:0}.mw-parser-output .quotebox .left-aligned{text-align:left}.mw-parser-output .quotebox .right-aligned{text-align:right}.mw-parser-output .quotebox .center-aligned{text-align:center}.mw-parser-output .quotebox .quote-title,.mw-parser-output .quotebox .quotebox-quote{display:block}.mw-parser-output .quotebox cite{display:block;font-style:normal}@media screen and (max-width:640px){.mw-parser-output .quotebox{width:100%!important;margin:0 0 .8em!important;float:none!important}}
/* end https://en.wikipedia.org/ */
</style><div class="quotebox pullquote floatright" style="width:50%; ;">
<blockquote class="quotebox-quote left-aligned" style="">
<p>I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning – it took a while to see how to do messaging in a programming language efficiently enough to be useful).
</p>
</blockquote>
<div style="padding-bottom: 0; padding-top: 0.5em"><cite class="left-aligned" style="">Alan Kay, <sup id="cite_ref-alanKayOnOO_1-1" class="reference"><a href="#cite_note-alanKayOnOO-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></cite></div>
</div>
<p>Influenced by both MIT and Simula, <a href="Alan_Kay" title="Alan Kay">Alan Kay</a> began developing his own ideas in November 1966. He would go on to create <a href="Smalltalk" title="Smalltalk">Smalltalk</a>, an influential OOP language. By 1967, Kay was already using the term "object-oriented programming" in conversation.<sup id="cite_ref-alanKayOnOO_1-2" class="reference"><a href="#cite_note-alanKayOnOO-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Although sometimes called the "father" of OOP,<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> Kay has said his ideas differ from how OOP is commonly understood, and has implied that the computer science establishment did not adopt his notion.<sup id="cite_ref-alanKayOnOO_1-3" class="reference"><a href="#cite_note-alanKayOnOO-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
A 1976 MIT memo co-authored by <a href="Barbara_Liskov" title="Barbara Liskov">Barbara Liskov</a> lists <a href="Simula_67" class="mw-redirect" title="Simula 67">Simula 67</a>, <a href="CLU_(programming_language)" title="CLU (programming language)">CLU</a>, and <a href="Alphard_(programming_language)" title="Alphard (programming language)">Alphard</a> as object-oriented languages, but does not mention Smalltalk.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p><p>In the 1970s, the first version of the <a href="Smalltalk" title="Smalltalk">Smalltalk</a> programming language was developed at <a href="Xerox_PARC" class="mw-redirect" title="Xerox PARC">Xerox PARC</a> by <a href="Alan_Kay" title="Alan Kay">Alan Kay</a>, <a href="Dan_Ingalls" title="Dan Ingalls">Dan Ingalls</a> and <a href="Adele_Goldberg_(computer_scientist)" title="Adele Goldberg (computer scientist)">Adele Goldberg</a>. Smalltalk-72 was notable for use of objects at the language level and its graphical development environment.<sup id="cite_ref-Bertrand_Meyer_2009_329_20-0" class="reference"><a href="#cite_note-Bertrand_Meyer_2009_329-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> Smalltalk was a fully dynamic system, allowing users to create and modify classes as they worked.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> Much of the theory of OOP was developed in the context of Smalltalk, for example multiple inheritance.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
</p><p>In the late 1970s and 1980s, OOP rose to prominence. The <a href="Flavors_(programming_language)" title="Flavors (programming language)">Flavors</a> object-oriented Lisp was developed starting 1979, introducing <a href="Multiple_inheritance" title="Multiple inheritance">multiple inheritance</a> and <a href="Mixin" title="Mixin">mixins</a>.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> In August 1981, <a href="Byte_Magazine" class="mw-redirect" title="Byte Magazine">Byte Magazine</a> highlighted Smalltalk and OOP, introducing these ideas to a wide audience.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> LOOPS, the object system for <a href="Interlisp" title="Interlisp">Interlisp</a>-D, was influenced by Smalltalk and Flavors, and a paper about it was published in 1982.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> In 1986, the first <i>Conference on Object-Oriented Programming, Systems, Languages, and Applications</i> (<a href="OOPSLA" title="OOPSLA">OOPSLA</a>) was attended by 1,000 people. This conference marked the start of efforts to consolidate Lisp object systems, eventually resulting in the <a href="Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a>. In the 1980s, there were a few attempts to design <a href="Processor_design" title="Processor design">processor architectures</a> that included <a href="Computer_hardware" title="Computer hardware">hardware</a> support for objects in <a href="Computer_memory" title="Computer memory">memory</a>, but these were not successful. Examples include the <a href="Intel_iAPX_432" title="Intel iAPX 432">Intel iAPX 432</a> and the <a href="Linn_Products" title="Linn Products">Linn Smart</a> <a href="Rekursiv" title="Rekursiv">Rekursiv</a>.
</p><p>In the mid-1980s, new object-oriented languages like <a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="C%2B%2B" title="C++">C++</a>, and <a href="Eiffel_language" class="mw-redirect" title="Eiffel language">Eiffel</a> emerged. Objective-C was developed by <a href="Brad_Cox" title="Brad Cox">Brad Cox</a>, who had used Smalltalk at <a href="ITT_Inc." title="ITT Inc.">ITT Inc.</a> <a href="Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a> created <a href="C%2B%2B" title="C++">C++</a> based on his experience using Simula for his PhD thesis.<sup id="cite_ref-Bertrand_Meyer_2009_329_20-1" class="reference"><a href="#cite_note-Bertrand_Meyer_2009_329-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> <a href="Bertrand_Meyer" title="Bertrand Meyer">Bertrand Meyer</a> produced the first design of the <a href="Eiffel_language" class="mw-redirect" title="Eiffel language">Eiffel language</a> in 1985, which focused on software quality using a <a href="Design_by_contract" title="Design by contract">design by contract</a> approach.<sup id="cite_ref-FOOTNOTEMeyer1997_26-0" class="reference"><a href="#cite_note-FOOTNOTEMeyer1997-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p><p>In the 1990s, OOP became the main way of programming, especially as more languages supported it. These included <a href="Visual_FoxPro" title="Visual FoxPro">Visual FoxPro</a> 3.0,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> <a href="C%2B%2B" title="C++">C++</a>,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> and <a href="Delphi_(software)" title="Delphi (software)">Delphi</a>. OOP became even more popular with the rise of <a href="Graphical_user_interface" title="Graphical user interface">graphical user interfaces</a>, which used objects for buttons, menus and other elements. One well-known example is Apple's <a href="Cocoa_(software)" class="mw-redirect" title="Cocoa (software)">Cocoa</a> framework, used on <a href="MacOS" title="MacOS">macOS</a> and written in <a href="Objective-C" title="Objective-C">Objective-C</a>. OOP toolkits also enhanced the popularity of <a href="Event-driven_programming" title="Event-driven programming">event-driven programming</a>.
</p><p>At <a href="ETH_Z%C3%BCrich" class="mw-redirect" title="ETH Zürich">ETH Zürich</a>, <a href="Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a> and his colleagues created new approaches to OOP. <a href="Modula-2" title="Modula-2">Modula-2</a> (1978) and <a href="Oberon_(programming_language)" title="Oberon (programming language)">Oberon</a> (1987), included a distinctive approach to object orientation, classes, and type checking across module boundaries. Inheritance is not obvious in Wirth's design since his nomenclature looks in the opposite direction: It is called type extension and the viewpoint is from the parent down to the inheritor.
</p><p>Many programming languages that were initially developed before OOP was popular have been augmented with object-oriented features, including <a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a>, <a href="BASIC" title="BASIC">BASIC</a>, <a href="Fortran" title="Fortran">Fortran</a>, <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>, and <a href="COBOL" title="COBOL">COBOL</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<p>
</p>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">See also: <a href="Comparison_of_programming_languages_(object-oriented_programming)" title="Comparison of programming languages (object-oriented programming)">Comparison of programming languages (object-oriented programming)</a> and <a href="List_of_object-oriented_programming_terms" class="mw-redirect" title="List of object-oriented programming terms">List of object-oriented programming terms</a></div>
<p>The OOP features provided by languages varies. Below are some common features of OOP languages.<sup id="cite_ref-ArmstrongQuarks_30-0" class="reference"><a href="#cite_note-ArmstrongQuarks-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-pierce_33-0" class="reference"><a href="#cite_note-pierce-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> Comparing OOP with other styles, like <a href="Relational_programming" class="mw-redirect" title="Relational programming">relational programming</a>, is difficult because there isn't a clear, agreed-upon definition of OOP.<sup id="cite_ref-DatePage650_34-0" class="reference"><a href="#cite_note-DatePage650-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Encapsulation">Encapsulation</h3></div>
<p>An object <a href="Encapsulation_(computer_programming)" title="Encapsulation (computer programming)">encapsulates</a> <a href="Field_(computer_science)" title="Field (computer science)">fields</a> and <a href="Method_(computer_programming)" title="Method (computer programming)">methods</a>. A field (a.k.a. attribute or property) contains information (a.k.a. state) as a <a href="Variable_(computer_science)" title="Variable (computer science)">variable</a>. A method (a.k.a. <a href="Function_(programming)" class="mw-redirect" title="Function (programming)">function</a> or action) defines behavior via logic code. Encapsulation is about keeping <a href="Cohesion_(computer_science)" title="Cohesion (computer science)">related</a>, code together.
</p>
<div class="mw-heading mw-heading3"><h3 id="Information_hiding">Information hiding</h3></div>
<p><a href="Information_hiding" title="Information hiding">Information hiding</a> is organizing code so that it is accessible only to the code that needs it; not to the rest of the <a href="Codebase" title="Codebase">codebase</a>. The internal details of an object are hidden from the outside code, allowing for changing how an object works without affecting its interface and therefore other code. Hiding information helps prevent problems when changing the code.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> Objects act as a barrier between their internal workings and external, consuming code. Consuming code can only interact with an object via its public members.
</p><p>Some programming languages, like Java, provide information hiding via visibility key words (<code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">private</code> and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">public</code>).<sup id="cite_ref-FOOTNOTEBloch201873–77Chapter_§4_Item15_Minimize_the_accessibility_of_classes_and_members_36-0" class="reference"><a href="#cite_note-FOOTNOTEBloch201873–77Chapter_§4_Item15_Minimize_the_accessibility_of_classes_and_members-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> Some languages don't provide a visibility feature, but developers might follow a convention such as starting a private member name with an underscore. Intermediate levels of access also exist, such as Java's <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">protected</code> keyword, (which allows access from the same class and its subclasses, but not objects of a different class), and the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">internal</code> keyword in C#, Swift, and Kotlin, which restricts access to files within the same module.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>
</p><p>Supporters of information hiding and data abstraction say it makes code easier to reuse and intuitively represents real-world situations.<sup id="cite_ref-Luca1985_38-0" class="reference"><a href="#cite_note-Luca1985-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> However, others argue that OOP does not enhance readability or modularity.<sup id="cite_ref-badprop_40-0" class="reference"><a href="#cite_note-badprop-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-armstrongjoe_41-0" class="reference"><a href="#cite_note-armstrongjoe-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> <a href="Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a> has written that OOP languages tend to encourage thickly layered programs that destroy transparency.<sup id="cite_ref-Eric_S._Raymond_2003_42-0" class="reference"><a href="#cite_note-Eric_S._Raymond_2003-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> Raymond compares this unfavourably to the approach taken with <a href="Unix" title="Unix">Unix</a> and the <a href="C_(programming_language)" title="C (programming language)">C</a> language.<sup id="cite_ref-Eric_S._Raymond_2003_42-1" class="reference"><a href="#cite_note-Eric_S._Raymond_2003-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup>
</p><p><a href="SOLID" title="SOLID">SOLID</a> includes the <a href="Open/closed_principle" class="mw-redirect" title="Open/closed principle">open/closed principle</a>, which says that classes and functions should be "open for extension, but closed for modification". <a href="Luca_Cardelli" title="Luca Cardelli">Luca Cardelli</a> has stated that OOP languages have "extremely poor modularity properties with respect to class extension and modification", and tend to be extremely complex.<sup id="cite_ref-badprop_40-1" class="reference"><a href="#cite_note-badprop-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> The latter point is reiterated by <a href="Joe_Armstrong_(programmer)" title="Joe Armstrong (programmer)">Joe Armstrong</a>, the principal inventor of <a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>, who is quoted as saying:<sup id="cite_ref-armstrongjoe_41-1" class="reference"><a href="#cite_note-armstrongjoe-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup>
</p>
<style data-mw-deduplicate="TemplateStyles:r1244412712">
/* start https://en.wikipedia.org/ */
.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}
/* end https://en.wikipedia.org/ */
</style><blockquote class="templatequote"><p>The problem with object-oriented languages is they've got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.</p></blockquote>
<p>Leo Brodie says that information hiding can lead to <a href="Duplicate_code" title="Duplicate code">duplicate code</a>,<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> which goes against the <a href="Don't_repeat_yourself" title="Don't repeat yourself">don't repeat yourself</a> rule of software development.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Composition">Composition</h3></div>
<p>Via <a href="Object_composition" title="Object composition">object composition</a>, an object can contain other objects. For example, an <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Employee</code> object might contain an <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Address</code> object, along with other information like <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">name</code> and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">position</code>. Composition is a "has-a" relationships, like "an employee has an address".
</p>
<div class="mw-heading mw-heading3"><h3 id="Inheritance">Inheritance</h3></div>
<p><a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">Inheritance</a> be supported via the <a href="Class_(computer_programming)" title="Class (computer programming)">class</a> or the <a href="Prototype-based_programming" title="Prototype-based programming">prototype</a>, which have differences but use similar terms like object and <a href="Instance_(computer_science)" title="Instance (computer science)">instance</a>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Class-based">Class-based</h4></div>
<p>In <a href="Class-based_programming" title="Class-based programming">class-based programming</a>, the most common type of OOP, an object is an instance of a class. The class defines the data (variables) and methods (logic). An object is created via the <a href="Constructor_(object-oriented_programming)" title="Constructor (object-oriented programming)">constructor</a>. Elements of class may include:
</p>
<ul><li><a href="Class_variable" title="Class variable">Class variable</a> – belongs to the class itself; all objects of the class share one copy</li>
<li><a href="Instance_variable" title="Instance variable">Instance variable</a> – belongs to an object; every object has its own version of these variables</li>
<li><a href="Member_variable" title="Member variable">Member variable</a> – refers to both the class and instance variables of a class</li>
<li>Class method – can only use class variables</li>
<li>Instance method – belongs to an objects; can use both instance and class variables</li></ul>
<p>Classes may inherit from other classes, creating a hierarchy of classes: a case of a subclass inheriting from a super-class. For example, an <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Employee</code> class might inherit from a <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Person</code> class which endows the Employee object with the variables from <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Person</code>. The subclass may add variables and methods that do not affect the super-class. Most languages also allow the subclass to override super-class methods. Some languages support <a href="Multiple_inheritance" title="Multiple inheritance">multiple inheritance</a>, where a class can inherit from more than one class, and other languages similarly support <a href="Mixin" title="Mixin">mixins</a> or <a href="Trait_(computer_programming)" title="Trait (computer programming)">traits</a>. For example, a mixin called UnicodeConversionMixin might add a method unicode_to_ascii() to both a FileReader and a WebPageScraper class.
</p><p>An <a href="Abstract_class" class="mw-redirect" title="Abstract class">abstract class</a> cannot be directly instantiated as an object. It is only used as a super-class.
</p><p>Other classes are utility classes which contain only class variables and methods and are not meant to be instantiated or subclassed.<sup id="cite_ref-FOOTNOTEBloch201819Chapter_§2_Item_4_Enforce_noninstantiability_with_a_private_constructor_45-0" class="reference"><a href="#cite_note-FOOTNOTEBloch201819Chapter_§2_Item_4_Enforce_noninstantiability_with_a_private_constructor-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Prototype-based">Prototype-based</h4></div>
<p>Instead of providing a class concept, in <a href="Prototype-based_programming" title="Prototype-based programming">prototype-based programming</a>, an object is linked to another object, called its <i>prototype</i> or <i>parent</i>. In Self, an object may have multiple or no parents,<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> but in the most popular prototype-based language, <a href="JavaScript" title="JavaScript">JavaScript</a>, an object has exactly one prototype link, up to the base object whose prototype is null.
</p><p>A prototype acts as a model for new objects. For example, if you have an object <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">fruit</code>, you can make two objects <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">apple</code> and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">orange</code> that share traits of the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">fruit</code> prototype. Prototype-based languages also allow objects to have their own unique properties, so the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">apple</code> object might have an attribute <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">sugar_content</code>, while the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">orange</code> or <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">fruit</code> objects do not.
</p>
<div class="mw-heading mw-heading4"><h4 id="No_inheritance">No inheritance</h4></div>
<p>Some languages, like <a href="Go_(programming_language)" title="Go (programming language)">Go</a>, don't support inheritance.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> Instead, they encourage "<a href="Composition_over_inheritance" title="Composition over inheritance">composition over inheritance</a>", where objects are built using smaller parts instead of parent-child relationships. For example, instead of inheriting from class Person, the Employee class could simply contain a Person object. This lets the Employee class control how much of Person it exposes to other parts of the program. <a href="Delegation_(object-oriented_programming)" title="Delegation (object-oriented programming)">Delegation</a> is another language feature that can be used as an alternative to inheritance.
</p><p>Programmers have different opinions on inheritance. Bjarne Stroustrup, author of C++, has stated that it is possible to do OOP without inheritance.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> <a href="Rob_Pike" title="Rob Pike">Rob Pike</a> has criticized inheritance for creating complex hierarchies instead of simpler solutions.<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Inheritance_and_behavioral_subtyping">Inheritance and behavioral subtyping</h4></div>
<p>People often think that if one class inherits from another, it means the subclass "<a href="Is_a" class="mw-redirect" title="Is a">is a</a>" more specific version of the original class. This presumes the <a href="Program_semantics" class="mw-redirect" title="Program semantics">program semantics</a> are that objects from the subclass can always replace objects from the original class without problems. This concept is known as <a href="Behavioral_subtyping" title="Behavioral subtyping">behavioral subtyping</a>, more specifically the <a href="Liskov_substitution_principle" title="Liskov substitution principle">Liskov substitution principle</a>.
</p><p>However, this is often not true, especially in programming languages that allow <a href="Mutable" class="mw-redirect" title="Mutable">mutable</a> objects, objects that change after they are created. In fact, <a href="Subtype_polymorphism" class="mw-redirect" title="Subtype polymorphism">subtype polymorphism</a> as enforced by the <a href="Type_checker" class="mw-redirect" title="Type checker">type checker</a> in OOP languages cannot guarantee behavioral subtyping in most if not all contexts. For example, the <a href="Circle-ellipse_problem" class="mw-redirect" title="Circle-ellipse problem">circle-ellipse problem</a> is notoriously difficult to handle using OOP's concept of inheritance. Behavioral subtyping is undecidable in general, so it cannot be easily implemented by a compiler. Because of this, programmers must carefully design class hierarchies to avoid mistakes that the programming language itself cannot catch.
</p>
<div class="mw-heading mw-heading3"><h3 id="Dynamic_dispatch">Dynamic dispatch</h3></div>
<p>A method my be invoked via <a href="Dynamic_dispatch" title="Dynamic dispatch">dynamic dispatch</a> such that the method is selected at runtime instead of compile time. If the method choice depends on more than one type of object (such as other objects passed as parameters), it's called <a href="Multiple_dispatch" title="Multiple dispatch">multiple dispatch</a>.
</p><p>Dynamic dispatch works together with inheritance: if an object doesn't have the requested method, it looks up to its parent class (<a href="Delegation_(object-oriented_programming)" title="Delegation (object-oriented programming)">delegation</a>), and continues up the chain to find a matching method.
</p>
<div class="mw-heading mw-heading3"><h3 id="Message_passing">Message passing</h3></div>
<p><a href="Message_passing" title="Message passing">Message passing</a> is when the method name and its inputs are sent like a message to the object for it to act on.
</p>
<div class="mw-heading mw-heading3"><h3 id="Polymorphism">Polymorphism</h3></div>
<p><a href="Polymorphism_(computer_science)" title="Polymorphism (computer science)">Polymorphism</a> refers to <a href="Subtyping" title="Subtyping">subtyping</a> or subtype polymorphism, where a function can work with a specific <a href="Interface_(object-oriented_programming)" title="Interface (object-oriented programming)">interface</a> and thus manipulate entities of different classes in a uniform manner.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup>
</p><p>For example, imagine a program has two shapes: a circle and a square. Both come from a common class called "Shape." Each shape has its own way of drawing itself. With subtype polymorphism, the program doesn't need to know the type of each shape, and can simply call the "Draw" method for each shape. The programming language runtime will ensure the correct version of the "Draw" method runs for each shape. Because the details of each shape are handled inside their own classes, this makes the code simpler and more organized, enabling strong <a href="Separation_of_concerns" title="Separation of concerns">separation of concerns</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Open_recursion">Open recursion</h3></div>
<p>An object's methods can access the object's data. Many programming languages use a special word, like <a href="This_(computer_programming)" title="This (computer programming)"><code class="mw-highlight mw-highlight-lang-c++ mw-content-ltr" style="" dir="ltr"><span class="k">this</span></code></a> or <code class="mw-highlight mw-highlight-lang-swift mw-content-ltr" style="" dir="ltr"><span class="kc">self</span></code>, to refer to the current object. In languages that support <a href="Open_recursion" class="mw-redirect" title="Open recursion">open recursion</a>, a method in an object can call other methods in the same object, including itself, using this special word. This allows a method in one class to call another method defined later in a subclass, a feature known as <a href="Late_binding" title="Late binding">late binding</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Design_patterns">Design patterns</h2></div>
<p><a href="Design_pattern_(computer_science)" class="mw-redirect" title="Design pattern (computer science)">Design patterns</a> are common solutions to problems in software design. Some design patterns are especially useful for OOP, and design patterns are typically introduced in an OOP context.
</p>
<div class="mw-heading mw-heading3"><h3 id="Object_patterns">Object patterns</h3></div>
<p>The following are notable <a href="Software_design_pattern" title="Software design pattern">software design patterns</a> for OOP objects.<sup id="cite_ref-R.C.Martin_51-0" class="reference"><a href="#cite_note-R.C.Martin-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="Function_object" title="Function object">Function object</a>: Class with one main method that acts like an <a href="Anonymous_function" title="Anonymous function">anonymous function</a> (in C++, the function operator, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">operator()</code>)</li>
<li><a href="Immutable_object" title="Immutable object">Immutable object</a>: does not change state after creation</li>
<li><a href="First-class_object" class="mw-redirect" title="First-class object">First-class object</a>: can be used without restriction</li>
<li><a href="Container_object" class="mw-redirect" title="Container object">Container object</a>: contains other objects</li>
<li><a href="Factory_object" class="mw-redirect" title="Factory object">Factory object</a>: creates other objects</li>
<li><a href="Metaobject" title="Metaobject">Metaobject</a>: Used to create other objects (similar to a <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a>, but an object)</li>
<li><a href="Prototype_pattern" title="Prototype pattern">Prototype object</a>: a specialized metaobject that creates new objects by copying itself</li>
<li><a href="Singleton_pattern" title="Singleton pattern">Singleton object</a>: only instance of its class for the lifetime of the program</li>
<li><a href="Filter_object" class="mw-redirect" title="Filter object">Filter object</a>: receives a stream of data as its input and transforms it into the object's output</li></ul>
<p>A common <a href="Anti-pattern" title="Anti-pattern">anti-pattern</a> is the <a href="God_object" title="God object">God object</a>, an object that knows or does too much.
</p>
<div class="mw-heading mw-heading3"><h3 id="Gang_of_Four_design_patterns">Gang of Four design patterns</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Design_pattern_(computer_science)" class="mw-redirect" title="Design pattern (computer science)">Design pattern (computer science)</a></div>
<p><i><a href="Design_Patterns%3A_Elements_of_Reusable_Object-Oriented_Software" class="mw-redirect" title="Design Patterns: Elements of Reusable Object-Oriented Software">Design Patterns: Elements of Reusable Object-Oriented Software</a></i> is a famous book published in 1994 by four authors: <a href="Erich_Gamma" title="Erich Gamma">Erich Gamma</a>, <a href="Richard_Helm" title="Richard Helm">Richard Helm</a>, <a href="Ralph_Johnson_(computer_scientist)" title="Ralph Johnson (computer scientist)">Ralph Johnson</a>, and <a href="John_Vlissides" title="John Vlissides">John Vlissides</a>. People often call them the "Gang of Four". The book talks about the strengths and weaknesses of OOP and explains 23 common ways to solve programming problems.
</p><p>These solutions, called "design patterns," are grouped into three types:
</p>
<ul><li><i><a href="Creational_pattern" title="Creational pattern">Creational patterns</a></i> (5): <a href="Factory_method_pattern" title="Factory method pattern">Factory method pattern</a>, <a href="Abstract_factory_pattern" title="Abstract factory pattern">Abstract factory pattern</a>, <a href="Singleton_pattern" title="Singleton pattern">Singleton pattern</a>, <a href="Builder_pattern" title="Builder pattern">Builder pattern</a>, <a href="Prototype_pattern" title="Prototype pattern">Prototype pattern</a></li>
<li><i><a href="Structural_pattern" title="Structural pattern">Structural patterns</a></i> (7): <a href="Adapter_pattern" title="Adapter pattern">Adapter pattern</a>, <a href="Bridge_pattern" title="Bridge pattern">Bridge pattern</a>, <a href="Composite_pattern" title="Composite pattern">Composite pattern</a>, <a href="Decorator_pattern" title="Decorator pattern">Decorator pattern</a>, <a href="Facade_pattern" title="Facade pattern">Facade pattern</a>, <a href="Flyweight_pattern" title="Flyweight pattern">Flyweight pattern</a>, <a href="Proxy_pattern" title="Proxy pattern">Proxy pattern</a></li>
<li><i><a href="Behavioral_pattern" title="Behavioral pattern">Behavioral patterns</a></i> (11): <a href="Chain-of-responsibility_pattern" title="Chain-of-responsibility pattern">Chain-of-responsibility pattern</a>, <a href="Command_pattern" title="Command pattern">Command pattern</a>, <a href="Interpreter_pattern" title="Interpreter pattern">Interpreter pattern</a>, <a href="Iterator_pattern" title="Iterator pattern">Iterator pattern</a>, <a href="Mediator_pattern" title="Mediator pattern">Mediator pattern</a>, <a href="Memento_pattern" title="Memento pattern">Memento pattern</a>, <a href="Observer_pattern" title="Observer pattern">Observer pattern</a>, <a href="State_pattern" title="State pattern">State pattern</a>, <a href="Strategy_pattern" title="Strategy pattern">Strategy pattern</a>, <a href="Template_method_pattern" title="Template method pattern">Template method pattern</a>, <a href="Visitor_pattern" title="Visitor pattern">Visitor pattern</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Object-orientation_and_databases">Object-orientation and databases</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main articles: <a href="Object-relational_impedance_mismatch" class="mw-redirect" title="Object-relational impedance mismatch">Object-relational impedance mismatch</a>, <a href="Object-relational_mapping" class="mw-redirect" title="Object-relational mapping">Object-relational mapping</a>, and <a href="Object_database" title="Object database">Object database</a></div>
<p>Both OOP and <a href="Relational_database_management_systems" class="mw-redirect" title="Relational database management systems">relational database management systems</a> (RDBMSs) are widely used in software today. However, <a href="Relational_database" title="Relational database">relational databases</a> don't store objects directly, which creates a challenge when using them together. This issue is called <a href="Object-relational_impedance_mismatch" class="mw-redirect" title="Object-relational impedance mismatch">object-relational impedance mismatch</a>.
</p><p>To solve this problem, developers use different methods, but none of them are perfect.<sup id="cite_ref-RDMDBobjectmis_52-0" class="reference"><a href="#cite_note-RDMDBobjectmis-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> One of the most common solutions is <a href="Object-relational_mapping" class="mw-redirect" title="Object-relational mapping">object-relational mapping</a> (ORM), which helps connect object-oriented programs to relational databases. Examples of ORM tools include <a href="Visual_FoxPro" title="Visual FoxPro">Visual FoxPro</a>, <a href="Java_Data_Objects" title="Java Data Objects">Java Data Objects</a>, and <a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a> ActiveRecord.
</p><p>Some databases, called <a href="Object_database" title="Object database">object databases</a>, are designed to work with OOP. However, they have not been as popular or successful as relational databases.
</p><p>Date and Darwen have proposed a theoretical foundation that uses OOP as a kind of customizable <a href="Data_type" title="Data type">type system</a> to support RDBMSs, but it forbids objects containing pointers to other objects.<sup id="cite_ref-ThirdManifesto_53-0" class="reference"><a href="#cite_note-ThirdManifesto-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Responsibility-_vs._data-driven_design">Responsibility- vs. data-driven design</h3></div>
<p>In <a href="Responsibility-driven_design" title="Responsibility-driven design">responsibility-driven design</a>, classes are built around what they need to do and the information they share, in the form of a contract. This is different from <a href="Data-driven_programming" title="Data-driven programming">data-driven design</a>, where classes are built based on the data they need to store. According to Wirfs-Brock and Wilkerson, the originators of responsibility-driven design, responsibility-driven design is the better approach.<sup id="cite_ref-Wirfs-Brock1989_54-0" class="reference"><a href="#cite_note-Wirfs-Brock1989-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="SOLID_and_GRASP_guidelines">SOLID and GRASP guidelines</h3></div>
<p><a href="SOLID" title="SOLID">SOLID</a> is a set of five rules for designing good software, created by Michael Feathers:
</p>
<ul><li><a href="Single_responsibility_principle" class="mw-redirect" title="Single responsibility principle">Single responsibility principle</a>: A class should have only one reason to change.</li>
<li><a href="Open/closed_principle" class="mw-redirect" title="Open/closed principle">Open/closed principle</a>: Software entities should be open for extension, but closed for modification.</li>
<li><a href="Liskov_substitution_principle" title="Liskov substitution principle">Liskov substitution principle</a>: Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.</li>
<li><a href="Interface_segregation_principle" title="Interface segregation principle">Interface segregation principle</a>: Clients should not be forced to depend upon interfaces that they do not use.</li>
<li><a href="Dependency_inversion_principle" title="Dependency inversion principle">Dependency inversion principle</a>: Depend upon abstractions, not concretes.</li></ul>
<p><a href="GRASP_(object-oriented_design)" title="GRASP (object-oriented design)">GRASP</a> (General Responsibility Assignment Software Patterns) is another set of software design rules, created by <a href="Craig_Larman" title="Craig Larman">Craig Larman</a>, that helps developers assign responsibilities to different parts of a program:<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Creator Principle: allows classes create objects they closely use.</li>
<li>Information Expert Principle: assigns tasks to classes with the needed information.</li>
<li>Low Coupling Principle: reduces class dependencies to improve flexibility and maintainability.</li>
<li>High Cohesion Principle: designing classes with a single, focused responsibility.</li>
<li>Controller Principle: assigns system operations to separate classes that manage flow and interactions.</li>
<li>Polymorphism: allows different classes to be used through a common interface, promoting flexibility and reuse.</li>
<li>Pure Fabrication Principle: create helper classes to improve design, boost cohesion, and reduce coupling.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Formal_semantics">Formal semantics</h2></div>
<p>Researchers have tried to formally define the <a href="Semantics_(computer_science)" title="Semantics (computer science)">semantics</a> of OOP. <a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> presents difficulties, particularly with the interactions between open recursion and encapsulated state. Researchers have used <a href="Recursive_type" class="mw-redirect" title="Recursive type">recursive types</a> and <a href="F-Coalgebra" class="mw-redirect" title="F-Coalgebra">co-algebraic data types</a> to incorporate essential features of OOP.<sup id="cite_ref-poll97_56-0" class="reference"><a href="#cite_note-poll97-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup> Abadi and Cardelli defined several extensions of <a href="System_F-sub" class="mw-redirect" title="System F-sub">System F<sub><:</sub></a> that deal with mutable objects, allowing both <a href="Subtype_polymorphism" class="mw-redirect" title="Subtype polymorphism">subtype polymorphism</a> and <a href="Parametric_polymorphism" title="Parametric polymorphism">parametric polymorphism</a> (generics), and were able to formally model many OOP concepts and constructs.<sup id="cite_ref-AbadiCardelli_57-0" class="reference"><a href="#cite_note-AbadiCardelli-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup> Although far from trivial, static analysis of object-oriented programming languages such as Java is a mature field,<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup> with several commercial tools.<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Criticism">Criticism</h2></div>
<p>Some believe that OOP places too much focus on using objects rather than on <a href="Algorithm" title="Algorithm">algorithms</a> and <a href="Data_structure" title="Data structure">data structures</a>.<sup id="cite_ref-stepanov_60-0" class="reference"><a href="#cite_note-stepanov-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hickey_61-0" class="reference"><a href="#cite_note-hickey-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup> For example, programmer <a href="Rob_Pike" title="Rob Pike">Rob Pike</a> pointed out that OOP can make programmers think more about type hierarchy than composition.<sup id="cite_ref-RobPike_62-0" class="reference"><a href="#cite_note-RobPike-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup> He has called OOP "the <a href="Roman_numerals" title="Roman numerals">Roman numerals</a> of computing".<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup> <a href="Rich_Hickey" title="Rich Hickey">Rich Hickey</a>, creator of <a href="Clojure" title="Clojure">Clojure</a>, described OOP as overly simplistic, especially when it comes to representing real-world things that change over time.<sup id="cite_ref-hickey_61-1" class="reference"><a href="#cite_note-hickey-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup> <a href="Alexander_Stepanov" title="Alexander Stepanov">Alexander Stepanov</a> said that OOP tries to fit everything into a single type, which can be limiting. He argued that sometimes we need multisorted algebras: families of interfaces that span multiple types, such as in <a href="Generic_programming" title="Generic programming">generic programming</a>. Stepanov also said that calling everything an "object" doesn't add much understanding.<sup id="cite_ref-stepanov_60-1" class="reference"><a href="#cite_note-stepanov-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup>
</p><p>OOP was created to make code easier to <a href="Code_reuse" title="Code reuse">reuse</a> and <a href="Software_maintenance" title="Software maintenance">maintain</a>.<sup id="cite_ref-realisticcodereuse_64-0" class="reference"><a href="#cite_note-realisticcodereuse-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> However, it was not designed to clearly show the flow of a program's instructions. That was left to the compiler. As computers began using more parallel processing and multiple <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">threads</a>, it became more important to understand and control how instructions flow. This is difficult to do with OOP.<sup id="cite_ref-flaws_65-0" class="reference"><a href="#cite_note-flaws-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-multithreadingisaverb_66-0" class="reference"><a href="#cite_note-multithreadingisaverb-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-multicore_67-0" class="reference"><a href="#cite_note-multicore-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup>
</p><p>Many popular programming languages, like C++, Java, and Python, use OOP. In the past, OOP was widely accepted,<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup> but recently, some programmers have criticized it and prefer functional programming instead.<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup> A study by Potok et al. found no major difference in productivity between OOP and other methods.<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Paul_Graham_(computer_programmer)" class="mw-redirect" title="Paul Graham (computer programmer)">Paul Graham</a>, a well-known computer scientist, believes big companies like OOP because it helps manage large teams of average programmers. He argues that OOP adds structure, making it harder for one person to make serious mistakes, but at the same time restrains smart programmers.<sup id="cite_ref-graham_72-0" class="reference"><a href="#cite_note-graham-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> <a href="Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a>, a <a href="Unix" title="Unix">Unix</a> programmer and <a href="Open-source_software" title="Open-source software">open-source software</a> advocate, argues that OOP is not the best way to write programs.<sup id="cite_ref-Eric_S._Raymond_2003_42-2" class="reference"><a href="#cite_note-Eric_S._Raymond_2003-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup>
</p><p>Richard Feldman says that, while OOP features helped some languages stay organized, their popularity comes from other reasons.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup> Lawrence Krubner argues that OOP doesn't offer special advantages compared to other styles, like functional programming, and can complicate coding.<sup id="cite_ref-lawrence_74-0" class="reference"><a href="#cite_note-lawrence-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup> <a href="Luca_Cardelli" title="Luca Cardelli">Luca Cardelli</a> says that OOP is slower and takes longer to compile than procedural programming.<sup id="cite_ref-badprop_40-2" class="reference"><a href="#cite_note-badprop-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */
.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}
/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="CADES" title="CADES">CADES</a></li>
<li><a href="Common_Object_Request_Broker_Architecture" title="Common Object Request Broker Architecture">Common Object Request Broker Architecture</a> (CORBA)</li>
<li><a href="Comparison_of_programming_languages_(object-oriented_programming)" title="Comparison of programming languages (object-oriented programming)">Comparison of programming languages (object-oriented programming)</a></li>
<li><a href="Component-based_software_engineering" title="Component-based software engineering">Component-based software engineering</a></li>
<li><a href="Distributed_Component_Object_Model" title="Distributed Component Object Model">Distributed Component Object Model</a></li>
<li><a href="Interface_description_language" title="Interface description language">Interface description language</a></li>
<li><a href="IDEF4" title="IDEF4">IDEF4</a></li>
<li><a href="Jeroo" title="Jeroo">Jeroo</a></li>
<li><a href="List_of_object-oriented_programming_languages" title="List of object-oriented programming languages">List of object-oriented programming languages</a></li>
<li><a href="Object_association" class="mw-redirect" title="Object association">Object association</a></li>
<li><a href="Object-oriented_analysis_and_design" title="Object-oriented analysis and design">Object-oriented analysis and design</a></li>
<li><a href="Object-oriented_modeling" title="Object-oriented modeling">Object-oriented modeling</a></li>
<li><a href="Object-oriented_ontology" title="Object-oriented ontology">Object-oriented ontology</a></li>
<li><a href="UML" class="mw-redirect" title="UML">UML</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-alanKayOnOO-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-alanKayOnOO_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-alanKayOnOO_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-alanKayOnOO_1-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-alanKayOnOO_1-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.purl.org/stefan_ram/pub/doc_kay_oop_en">"Dr. Alan Kay on the Meaning of "Object-Oriented Programming""</a>. 2003<span class="reference-accessdate">. Retrieved <span class="nowrap">11 February</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFKindlerKrivy2011" class="citation journal cs1">Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". <i>International Journal of General Systems</i>. <b>40</b> (3): <span class="nowrap">313–</span>343. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1080%2F03081079.2010.539975">10.1080/03081079.2010.539975</a>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFLewisLoftus2008" class="citation book cs1">Lewis, John; Loftus, William (2008). "1.6: Object-Oriented Programming". <i>Java Software Solutions</i>. Foundations of Programming Design (6th ed.). Pearson Education Inc. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-321-53205-3</bdi>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFBooch1986" class="citation book cs1"><a href="Grady_Booch" title="Grady Booch">Booch, Grady</a> (1986). <a class="external text external" href="https://en.wikiquote.org/wiki/Grady_Booch"><i>Software Engineering with Ada</i></a>. Addison Wesley. p. 220. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-8053-0608-8</bdi>. <q>Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world.</q></cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFWirth2006" class="citation journal cs1"><a href="Niklaus_Wirth" title="Niklaus Wirth">Wirth, Niklaus</a> (23 January 2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20161012215755/https://pdfs.semanticscholar.org/10bd/dc49b85196aaa6715dd46843d9dcffa38358.pdf">"Good ideas, through the looking glass"</a> <span class="cs1-format">(PDF)</span>. <i><a href="IEEE_Computer" class="mw-redirect" title="IEEE Computer">IEEE Computer</a></i>. Cover Feature. <b>39</b> (1): <span class="nowrap">28–</span>39. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMC.2006.20">10.1109/MC.2006.20</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6582369">6582369</a>. Archived from <a rel="nofollow" class="external text" href="https://pdfs.semanticscholar.org/10bd/dc49b85196aaa6715dd46843d9dcffa38358.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 12 October 2016.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=zHiWqnTWsn4">"Uncle Bob SOLID principles"</a>. <i><a href="YouTube" title="YouTube">YouTube</a></i>. 2 August 2018.</cite></span>
</li>
<li id="cite_note-FOOTNOTEMeyer1997230-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEMeyer1997230_7-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFMeyer1997">Meyer 1997</a>, p. 230.</span>
</li>
<li id="cite_note-executioniKoN-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-executioniKoN_8-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFYegge2006" class="citation web cs1">Yegge, Steve (30 March 2006). <a rel="nofollow" class="external text" href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html">"Execution in the Kingdom of Nouns"</a>. steve-yegge.blogspot.com<span class="reference-accessdate">. Retrieved <span class="nowrap">3 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-executioniKoN2-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-executioniKoN2_9-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBoronczyk2009" class="citation web cs1">Boronczyk, Timothy (11 June 2009). <a rel="nofollow" class="external text" href="http://zaemis.blogspot.com/2009/06/whats-wrong-with-oop.html">"What's Wrong with OOP"</a>. zaemis.blogspot.com<span class="reference-accessdate">. Retrieved <span class="nowrap">3 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEBloch2018xi–xiiForeword-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEBloch2018xi–xiiForeword_10-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFBloch2018">Bloch 2018</a>, pp. xi–xii, Foreword.</span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite id="CITEREFMcCarthyBraytonEdwardsFox1969" class="citation journal cs1"><a href="John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">McCarthy, J.</a>; Brayton, R.; Edwards, D.; <a href="Phyllis_Fox" title="Phyllis Fox">Fox, P.</a>; <a href="Louis_Hodes" title="Louis Hodes">Hodes, L.</a>; <a href="David_Luckham" title="David Luckham">Luckham, D.</a>; Maling, K.; <a href="David_Park_(computer_scientist)" title="David Park (computer scientist)">Park, D.</a>; <a href="Steve_Russell_(computer_scientist)" title="Steve Russell (computer scientist)">Russell, S.</a> (March 1969). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100717111134/http://history.siam.org/sup/Fox_1960_LISP.pdf">"LISP I Programmers Manual"</a> <span class="cs1-format">(PDF)</span>. <i>Computation Center and Research Laboratory of Electronics</i>. <a href="Boston" title="Boston">Boston</a>, <a href="Massachusetts" title="Massachusetts">Massachusetts</a>: Artificial Intelligence Group, <a href="M.I.T._Computation_Center" class="mw-redirect" title="M.I.T. Computation Center">M.I.T. Computation Center</a> and Research Laboratory: 88f. Archived from <a rel="nofollow" class="external text" href="http://history.siam.org/sup/Fox_1960_LISP.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 17 July 2010. <q>In the local M.I.T. patois, association lists [of atomic symbols] are also referred to as "property lists", and atomic symbols are sometimes called "objects".</q></cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFMcCarthyAbrahamsEdwardsHart1962" class="citation book cs1"><a href="John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">McCarthy, John</a>; Abrahams, Paul W.; Edwards, Daniel J.; Hart, Swapnil D.; Levin, Michael I. (1962). <a rel="nofollow" class="external text" href="https://archive.org/details/lisp15programmer00john/page/105"><i>LISP 1.5 Programmer's Manual</i></a>. <a href="MIT_Press" title="MIT Press">MIT Press</a>. p. <a rel="nofollow" class="external text" href="https://archive.org/details/lisp15programmer00john/page/105">105</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-262-13011-0</bdi>. <q>Object – a synonym for atomic symbol</q></cite> <span class="cs1-hidden-error citation-comment"><code class="cs1-code">{{cite book}}</code>: </span><span class="cs1-hidden-error citation-comment">ISBN / Date incompatibility (help)</span></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite id="CITEREFIvan_E._Sutherland1963" class="citation conference cs1"><a href="Ivan_E._Sutherland" class="mw-redirect" title="Ivan E. Sutherland">Ivan E. Sutherland</a> (May 1963). <i>Sketchpad: a man-machine graphical communication system</i>. AFIPS '63 (Spring): Proceedings of the May 21–23, 1963 Spring Joint Computer Conference. AFIPS Press. pp. <span class="nowrap">329–</span>346. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1461551.1461591">10.1145/1461551.1461591</a></span>.</cite></span>
</li>
<li id="cite_note-simuladev-14"><span class="mw-cite-backlink">^ <a href="#cite_ref-simuladev_14-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-simuladev_14-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFNygaardDahl1978" class="citation journal cs1"><a href="Kristen_Nygaard" title="Kristen Nygaard">Nygaard, Kristen</a>; <a href="Ole-Johan_Dahl" title="Ole-Johan Dahl">Dahl, Ole-Johan</a> (1 August 1978). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F960118.808391">"The development of the SIMULA languages"</a>. <i><a href="ACM_SIGPLAN_Notices" class="mw-redirect" title="ACM SIGPLAN Notices">ACM SIGPLAN Notices</a></i>. <b>13</b> (8): <span class="nowrap">245–</span>272. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F960118.808391">10.1145/960118.808391</a></span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text">
<cite id="CITEREFRoss" class="citation web cs1">Ross, Doug. <a rel="nofollow" class="external text" href="http://www.csail.mit.edu/timeline/timeline.php?query=event&id=19">"The first software engineering language"</a>. <i>LCS/AI Lab Timeline</i>. MIT Computer Science and Artificial Intelligence Laboratory<span class="reference-accessdate">. Retrieved <span class="nowrap">13 May</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-auto-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-auto_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-auto_16-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHolmevik1994" class="citation journal cs1">Holmevik, Jan Rune (Winter 1994). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170830065454/http://www.idi.ntnu.no/grupper/su/publ/simula/holmevik-simula-ieeeannals94.pdf">"Compiling Simula: A historical study of technological genesis"</a> <span class="cs1-format">(PDF)</span>. <i><a href="IEEE_Annals_of_the_History_of_Computing" title="IEEE Annals of the History of Computing">IEEE Annals of the History of Computing</a></i>. <b>16</b> (4): <span class="nowrap">25–</span>37. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2F85.329756">10.1109/85.329756</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:18148999">18148999</a>. Archived from <a rel="nofollow" class="external text" href="http://www.idi.ntnu.no/grupper/su/publ/simula/holmevik-simula-ieeeannals94.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 30 August 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">3 March</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite id="CITEREFMadsen" class="citation journal cs1">Madsen, Ole Lehrman. <a rel="nofollow" class="external text" href="https://amturing.acm.org/award_winners/nygaard_5916220.cfm">"Kristen Nygaard"</a>. <i>A.M. Turing Award Laureates</i><span class="reference-accessdate">. Retrieved <span class="nowrap">4 February</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite id="CITEREFButcher2014" class="citation book cs1">Butcher, Paul (30 June 2014). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=Xg9QDwAAQBAJ&pg=PT204"><i>Seven Concurrency Models in Seven Weeks: When Threads Unravel</i></a>. Pragmatic Bookshelf. p. 204. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-68050-466-8</bdi>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite id="CITEREFJonesLiskov1976" class="citation techreport cs1">Jones, Anita K.; Liskov, Barbara H. (April 1976). <a rel="nofollow" class="external text" href="http://csg.csail.mit.edu/CSGArchives/memos/Memo-137.pdf"><i>An Access Control Facility for Programming Languages</i></a> <span class="cs1-format">(PDF)</span> (Technical report). MIT. CSG Memo 137.</cite></span>
</li>
<li id="cite_note-Bertrand_Meyer_2009_329-20"><span class="mw-cite-backlink">^ <a href="#cite_ref-Bertrand_Meyer_2009_329_20-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Bertrand_Meyer_2009_329_20-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBertrand_Meyer2009" class="citation book cs1">Bertrand Meyer (2009). <i>Touch of Class: Learning to Program Well with Objects and Contracts</i>. Springer Science & Business Media. p. 329. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2009tclp.book.....M">2009tclp.book.....M</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-92144-8</bdi>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFAlan_C._Kay1993" class="citation journal cs1"><a href="Alan_C._Kay" class="mw-redirect" title="Alan C. Kay">Alan C. Kay</a> (March 1993). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F155360.155364">"The early history of Smalltalk"</a>. <i><a href="ACM_SIGPLAN_Notices" class="mw-redirect" title="ACM SIGPLAN Notices">ACM SIGPLAN Notices</a></i>. <b>28</b> (3): <span class="nowrap">69–</span>95. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F155360.155364">10.1145/155360.155364</a></span>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite id="CITEREFBorning1979" class="citation report cs1">Borning, Alan Hamilton (1979). <a rel="nofollow" class="external text" href="https://constraints.cs.washington.edu/ui/thinglab-tr.pdf">Thinglab: a constraint-oriented simulation laboratory</a> <span class="cs1-format">(PDF)</span> (Report). Stanford University.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite id="CITEREFMoon1986" class="citation conference cs1"><a href="David_A._Moon" title="David A. Moon">Moon, David A.</a> (June 1986). <a rel="nofollow" class="external text" href="https://www.cs.tufts.edu/comp/150FP/archive/david-moon/flavors.pdf">"Object-Oriented Programming with Flavors"</a> <span class="cs1-format">(PDF)</span>. <i>Conference proceedings on Object-oriented Programming Systems Languages and Applications</i>. <a href="OOPSLA" title="OOPSLA">OOPSLA</a> '86. pp. <span class="nowrap">1–</span>8. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F28697.28698">10.1145/28697.28698</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-89791-204-4</bdi>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:17150741">17150741</a><span class="reference-accessdate">. Retrieved <span class="nowrap">17 March</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://computerhistory.org/blog/introducing-the-smalltalk-zoo-48-years-of-smalltalk-history-at-chm/">"Introducing the Smalltalk Zoo"</a>. <i>CHM</i>. 17 December 2020.</cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite id="CITEREFBobrowStefik1982" class="citation conference cs1">Bobrow, D. G.; Stefik, M. J (1982). <a rel="nofollow" class="external text" href="https://www.markstefik.com/wp-content/uploads/2011/04/1982-Bobrow-Stefik-Data-Object-Pgming.pdf"><i>LOOPS: data and object oriented Programming for Interlisp</i></a> <span class="cs1-format">(PDF)</span>. European AI Conference.</cite></span>
</li>
<li id="cite_note-FOOTNOTEMeyer1997-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEMeyer1997_26-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFMeyer1997">Meyer 1997</a>.</span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text">1995 (June) <a href="Visual_FoxPro" title="Visual FoxPro">Visual FoxPro</a> 3.0, FoxPro evolves from a procedural language to an object-oriented language. Visual FoxPro 3.0 introduces a database container, seamless client/server capabilities, support for ActiveX technologies, and OLE Automation and null support. <a rel="nofollow" class="external text" href="http://www.foxprohistory.org/foxprotimeline.htm#summary_of_fox_releases">Summary of Fox releases</a></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text">1995 Reviewers Guide to Visual FoxPro 3.0: <a rel="nofollow" class="external text" href="http://www.dfpug.de/loseblattsammlung/migration/whitepapers/vfp_rg.htm">DFpug.de</a></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite id="CITEREFKhurana2009" class="citation book cs1">Khurana, Rohit (1 November 2009). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=MHmqfSBTXsAC&pg=PA16"><i>Object Oriented Programming with C++, 1E</i></a>. Vikas Publishing House Pvt Limited. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-81-259-2532-3</bdi>.</cite></span>
</li>
<li id="cite_note-ArmstrongQuarks-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-ArmstrongQuarks_30-0">^</a></b></span> <span class="reference-text">Deborah J. Armstrong. <i>The Quarks of Object-Oriented Development</i>. A survey of nearly 40 years of computing literature identified several fundamental concepts found in the large majority of definitions of OOP, in descending order of popularity: Inheritance, Object, Class, Encapsulation, Method, Message Passing, Polymorphism, and Abstraction.</span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><a href="John_C._Mitchell" title="John C. Mitchell">John C. Mitchell</a>, <i>Concepts in programming languages</i>, Cambridge University Press, 2003, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-521-78098-5</bdi>, p.278. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.</span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text">Michael Lee Scott, <i>Programming language pragmatics</i>, Edition 2, Morgan Kaufmann, 2006, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-12-633951-1</bdi>, p. 470. Lists encapsulation, inheritance, and dynamic dispatch.</span>
</li>
<li id="cite_note-pierce-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-pierce_33-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFPierce2002" class="citation book cs1">Pierce, Benjamin (2002). <a href="Types_and_Programming_Languages" title="Types and Programming Languages"><i>Types and Programming Languages</i></a>. MIT Press. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-262-16209-8</bdi>.</cite>, section 18.1 "What is Object-Oriented Programming?" Lists: Dynamic dispatch, encapsulation or multi-methods (multiple dispatch), subtype polymorphism, inheritance or delegation, open recursion ("this"/"self")</span>
</li>
<li id="cite_note-DatePage650-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-DatePage650_34-0">^</a></b></span> <span class="reference-text">C. J. Date, Introduction to Database Systems, 6th-ed., Page 650</span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite id="CITEREFMcDonough2017" class="citation book cs1">McDonough, James E. (2017). "Encapsulation". <i>Object-Oriented Design with ABAP: A Practical Approach</i>. <a href="Apress" class="mw-redirect" title="Apress">Apress</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-1-4842-2838-8">10.1007/978-1-4842-2838-8</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4842-2837-1</bdi> – via <a href="O'Reilly_Media" title="O'Reilly Media">O'Reilly</a>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEBloch201873–77Chapter_§4_Item15_Minimize_the_accessibility_of_classes_and_members-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEBloch201873–77Chapter_§4_Item15_Minimize_the_accessibility_of_classes_and_members_36-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFBloch2018">Bloch 2018</a>, pp. 73–77, Chapter §4 Item15 Minimize the accessibility of classes and members.</span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://softwaregeekbytes.com/object-oriented-programming-simple-words/">"What is Object Oriented Programming (OOP) In Simple Words? – Software Geek Bytes"</a>. 5 January 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">17 January</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-Luca1985-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-Luca1985_38-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFCardelliWegner1985" class="citation journal cs1">Cardelli, Luca; Wegner, Peter (10 December 1985). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F6041.6042">"On understanding types, data abstraction, and polymorphism"</a>. <i>ACM Computing Surveys</i>. <b>17</b> (4): <span class="nowrap">471–</span>523. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F6041.6042">10.1145/6041.6042</a></span>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0360-0300">0360-0300</a>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite id="CITEREFJacobsenMagnus_ChristersonPatrik_JonssonGunnar_Overgaard1992" class="citation book cs1">Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). <a rel="nofollow" class="external text" href="https://archive.org/details/objectorientedso00jaco/page/43"><i>Object Oriented Software Engineering</i></a>. Addison-Wesley ACM Press. pp. <a rel="nofollow" class="external text" href="https://archive.org/details/objectorientedso00jaco/page/43">43–69</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-54435-0</bdi>.</cite></span>
</li>
<li id="cite_note-badprop-40"><span class="mw-cite-backlink">^ <a href="#cite_ref-badprop_40-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-badprop_40-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-badprop_40-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFCardelli1996" class="citation journal cs1"><a href="Luca_Cardelli" title="Luca Cardelli">Cardelli, Luca</a> (1996). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="http://lucacardelli.name/Papers/BadPropertiesOfOO.html">"Bad Engineering Properties of Object-Oriented Languages"</a></span>. <i>ACM Comput. Surv</i>. <b>28</b> (4es): 150–es. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F242224.242415">10.1145/242224.242415</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0360-0300">0360-0300</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:12105785">12105785</a><span class="reference-accessdate">. Retrieved <span class="nowrap">21 April</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-armstrongjoe-41"><span class="mw-cite-backlink">^ <a href="#cite_ref-armstrongjoe_41-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-armstrongjoe_41-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFArmstrong" class="citation book cs1"><a href="Joe_Armstrong_(programmer)" title="Joe Armstrong (programmer)">Armstrong, Joe</a>. Seibel, Peter (ed.). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100305165150/http://www.codersatwork.com/"><i>Coders at Work: Reflections on the Craft of Programming</i></a>. Codersatwork.com. Archived from <a rel="nofollow" class="external text" href="http://www.codersatwork.com/">the original</a> on 5 March 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">13 November</span> 2009</span>.</cite></span>
</li>
<li id="cite_note-Eric_S._Raymond_2003-42"><span class="mw-cite-backlink">^ <a href="#cite_ref-Eric_S._Raymond_2003_42-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Eric_S._Raymond_2003_42-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Eric_S._Raymond_2003_42-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFRaymond2003" class="citation web cs1">Raymond, Eric S. (2003). <a rel="nofollow" class="external text" href="http://www.catb.org/esr/writings/taoup/html/unix_and_oo.html">"The Art of Unix Programming: Unix and Object-Oriented Languages"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">6 August</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrodie1984" class="citation book cs1">Brodie, Leo (1984). <a rel="nofollow" class="external text" href="https://thinking-forth.sourceforge.net/thinking-forth-ans.pdf"><i>Thinking Forth</i></a> <span class="cs1-format">(PDF)</span>. pp. <span class="nowrap">92–</span>93<span class="reference-accessdate">. Retrieved <span class="nowrap">4 May</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><cite id="CITEREFHunt" class="citation web cs1">Hunt, Andrew. <a rel="nofollow" class="external text" href="http://wiki.c2.com/?DontRepeatYourself">"Don't Repeat Yourself"</a>. <i>Category Extreme Programming</i><span class="reference-accessdate">. Retrieved <span class="nowrap">4 May</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEBloch201819Chapter_§2_Item_4_Enforce_noninstantiability_with_a_private_constructor-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEBloch201819Chapter_§2_Item_4_Enforce_noninstantiability_with_a_private_constructor_45-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFBloch2018">Bloch 2018</a>, p. 19, Chapter §2 Item 4 Enforce noninstantiability with a private constructor.</span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><cite id="CITEREFDonyMalenfantBardon1999" class="citation book cs1">Dony, C; Malenfant, J; Bardon, D (1999). <a rel="nofollow" class="external text" href="https://www.lirmm.fr/~dony/postscript/proto-book.pdf">"Classifying prototype-based programming languages"</a> <span class="cs1-format">(PDF)</span>. <i>Prototype-based programming: concepts, languages and applications</i>. Singapore Berlin Heidelberg: Springer. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9789814021258</bdi>.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://golang.org/doc/faq#Is_Go_an_object-oriented_language">"Is Go an object-oriented language?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">13 April</span> 2019</span>. <q>Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy.</q></cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite id="CITEREFStroustrup2015" class="citation conference cs1"><a href="Bjarne_Stroustrup" title="Bjarne Stroustrup">Stroustrup, Bjarne</a> (2015). <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=xcpSLRpOMJM"><i>Object-Oriented Programming without Inheritance (Invited Talk)</i></a>. 29th European Conference on Object-Oriented Programming (ECOOP 2015). 1:34. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.4230%2FLIPIcs.ECOOP.2015.1">10.4230/LIPIcs.ECOOP.2015.1</a></span>.</cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><cite id="CITEREFPike2012" class="citation web cs1">Pike, Rob (14 November 2012). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180814173134/http://plus.google.com/+RobPikeTheHuman/posts/hoJdanihKwb">"A few years ago I saw this page"</a>. Archived from <a rel="nofollow" class="external text" href="https://plus.google.com/+RobPikeTheHuman/posts/hoJdanihKwb">the original</a> on 14 August 2018<span class="reference-accessdate">. Retrieved <span class="nowrap">1 October</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite id="CITEREFStroustrup2007" class="citation web cs1"><a href="Bjarne_Stroustrup" title="Bjarne Stroustrup">Stroustrup, Bjarne</a> (19 February 2007). <a rel="nofollow" class="external text" href="http://www.stroustrup.com/glossary.html#Gpolymorphism">"Bjarne Stroustrup's C++ Glossary"</a>. <q>polymorphism – providing a single interface to entities of different types.</q></cite></span>
</li>
<li id="cite_note-R.C.Martin-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-R.C.Martin_51-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFMartin" class="citation web cs1"><a href="Robert_Cecil_Martin" class="mw-redirect" title="Robert Cecil Martin">Martin, Robert C.</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150906155800/http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf">"Design Principles and Design Patterns"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 6 September 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">28 April</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-RDMDBobjectmis-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-RDMDBobjectmis_52-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFNeward2006" class="citation web cs1">Neward, Ted (26 June 2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20060704030226/http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx">"The Vietnam of Computer Science"</a>. Interoperability Happens. Archived from <a rel="nofollow" class="external text" href="http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx">the original</a> on 4 July 2006<span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-ThirdManifesto-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-ThirdManifesto_53-0">^</a></b></span> <span class="reference-text">C. J. Date, Hugh Darwen. <i>Foundation for Future Database Systems: The Third Manifesto</i> (2nd Edition)</span>
</li>
<li id="cite_note-Wirfs-Brock1989-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-Wirfs-Brock1989_54-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFWirfs-BrockWilkerson1989" class="citation journal cs1">Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F74878.74885">"Object-Oriented Design: A Responsibility-Driven Approach"</a>. <i>ACM SIGPLAN Notices</i>. <b>24</b> (10): 74. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F74878.74885">10.1145/74878.74885</a></span>.</cite></span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><cite id="CITEREFKarsh2023" class="citation web cs1">Karsh, Patrick (19 July 2023). <a rel="nofollow" class="external text" href="https://patrickkarsh.medium.com/object-oriented-design-with-grasp-principles-8049fa63e52">"GRASP Principles: Object-Oriented Design Patterns"</a>. <i>Medium</i><span class="reference-accessdate">. Retrieved <span class="nowrap">30 March</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-poll97-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-poll97_56-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFPoll" class="citation web cs1">Poll, Erik. <a rel="nofollow" class="external text" href="https://www.cs.ru.nl/E.Poll/papers/kyoto97.pdf">"Subtyping and Inheritance for Categorical Datatypes"</a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">5 June</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-AbadiCardelli-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-AbadiCardelli_57-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFAbadiCardelli,_Luca1996" class="citation book cs1"><a href="Martin_Abadi" class="mw-redirect" title="Martin Abadi">Abadi, Martin</a>; Cardelli, Luca (1996). <a rel="nofollow" class="external text" href="http://portal.acm.org/citation.cfm?id=547964&dl=ACM&coll=portal"><i>A Theory of Objects</i></a>. Springer-Verlag New York, Inc. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-387-94775-4</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">21 April</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><cite id="CITEREFTanLi2023" class="citation conference cs1">Tan, Tian; Li, Yue (12 July 2023). <i>Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics</i>. ISSTA 2023. pp. <span class="nowrap">1093–</span>1105. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3597926.3598120">10.1145/3597926.3598120</a>.</cite></span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><cite id="CITEREFBhutaniToosiBuckley2024" class="citation journal cs1">Bhutani, Vikram; Toosi, Farshad Ghassemi; Buckley, Jim (1 June 2024). "Analysing the Analysers: An Investigation of Source Code Analysis Tools". <i>Applied Computer Systems</i>. <b>29</b> (1): <span class="nowrap">98–</span>111. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.2478%2Facss-2024-0013">10.2478/acss-2024-0013</a>.</cite></span>
</li>
<li id="cite_note-stepanov-60"><span class="mw-cite-backlink">^ <a href="#cite_ref-stepanov_60-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-stepanov_60-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFStepanov2001–2008" class="citation web cs1"><a href="Alexander_Stepanov" title="Alexander Stepanov">Stepanov, Alexander</a> (2001–2008). <a rel="nofollow" class="external text" href="http://www.stlport.org/resources/StepanovUSA.html">"STLport: An Interview with A. Stepanov"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">21 April</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-hickey-61"><span class="mw-cite-backlink">^ <a href="#cite_ref-hickey_61-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-hickey_61-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHickey2009" class="citation conference cs1">Hickey, Rich (November 2009). <a rel="nofollow" class="external text" href="http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey"><i>Are We There Yet? (keynote)</i></a>. JVM Languages Summit.</cite></span>
</li>
<li id="cite_note-RobPike-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-RobPike_62-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFPike2012" class="citation web cs1">Pike, Rob (25 June 2012). <a rel="nofollow" class="external text" href="https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html">"Less is exponentially more"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">1 October</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-63">^</a></b></span> <span class="reference-text"><cite id="CITEREFPike2004" class="citation mailinglist cs1"><a href="Rob_Pike" title="Rob Pike">Pike, Rob</a> (2 March 2004). <a rel="nofollow" class="external text" href="https://groups.google.com/group/comp.os.plan9/msg/006fec195aeeff15">"[9fans] Re: Threads: Sewing badges of honor onto a Kernel"</a>. <i>comp.os.plan9</i> (Mailing list)<span class="reference-accessdate">. Retrieved <span class="nowrap">17 November</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-realisticcodereuse-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-realisticcodereuse_64-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFAmbler1998" class="citation web cs1">Ambler, Scott (1 January 1998). <a rel="nofollow" class="external text" href="http://www.drdobbs.com/184415594">"A Realistic Look at Object-Oriented Reuse"</a>. drdobbs.com<span class="reference-accessdate">. Retrieved <span class="nowrap">5 August</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-flaws-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-flaws_65-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFShelly2008" class="citation web cs1">Shelly, Asaf (22 August 2008). <a rel="nofollow" class="external text" href="http://software.intel.com/en-us/blogs/2008/08/22/flaws-of-object-oriented-modeling/">"Flaws of Object Oriented Modeling"</a>. Intel Software Network<span class="reference-accessdate">. Retrieved <span class="nowrap">4 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-multithreadingisaverb-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-multithreadingisaverb_66-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFJames2007" class="citation web cs1">James, Justin (1 October 2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20071010105117/http://blogs.techrepublic.com.com/programming-and-development/?p=518">"Multithreading is a verb not a noun"</a>. techrepublic.com. Archived from <a rel="nofollow" class="external text" href="http://blogs.techrepublic.com.com/programming-and-development/?p=518">the original</a> on 10 October 2007<span class="reference-accessdate">. Retrieved <span class="nowrap">4 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-multicore-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-multicore_67-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFShelly2008" class="citation web cs1">Shelly, Asaf (22 August 2008). <a rel="nofollow" class="external text" href="http://support.microsoft.com/?scid=kb%3Ben-us%3B558117">"HOW TO: Multicore Programming (Multiprocessing) Visual C++ Class Design Guidelines, Member Functions"</a>. support.microsoft.com<span class="reference-accessdate">. Retrieved <span class="nowrap">4 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><cite id="CITEREFRobert_Harper2011" class="citation web cs1"><a href="Robert_Harper_(computer_scientist)" title="Robert Harper (computer scientist)">Robert Harper</a> (17 April 2011). <a rel="nofollow" class="external text" href="http://existentialtype.wordpress.com/2011/04/17/some-advice-on-teaching-fp/">"Some thoughts on teaching FP"</a>. Existential Type Blog<span class="reference-accessdate">. Retrieved <span class="nowrap">5 December</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><cite id="CITEREFBruckerWolff2008" class="citation book cs1">Brucker, Achim D.; Wolff, Burkhart (2008). "Extensible Universes for Object-Oriented Data Models". <i>ECOOP 2008 – Object-Oriented Programming</i>. Lecture Notes in Computer Science. Vol. 5142. pp. <span class="nowrap">438–</span>462. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-3-540-70592-5_19">10.1007/978-3-540-70592-5_19</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-70591-8</bdi>. <q>object-oriented programming is a widely accepted programming paradigm</q></cite></span>
</li>
<li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><cite id="CITEREFCassel2019" class="citation news cs1">Cassel, David (21 August 2019). <a rel="nofollow" class="external text" href="https://thenewstack.io/why-are-so-many-developers-hating-on-object-oriented-programming/">"Why Are So Many Developers Hating on Object-Oriented Programming?"</a>. <i>The New Stack</i>.</cite></span>
</li>
<li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><cite id="CITEREFPotokVoukRindos1999" class="citation journal cs1">Potok, Thomas; Vouk, Mladen; Rindos, Andy (1999). <a rel="nofollow" class="external text" href="http://www.csm.ornl.gov/~v8q/Homepage/Papers%20Old/spetep-%20printable.pdf">"Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment"</a> <span class="cs1-format">(PDF)</span>. <i>Software: Practice and Experience</i>. <b>29</b> (10): <span class="nowrap">833–</span>847. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2F%28SICI%291097-024X%28199908%2929%3A10%3C833%3A%3AAID-SPE258%3E3.0.CO%3B2-P">10.1002/(SICI)1097-024X(199908)29:10<833::AID-SPE258>3.0.CO;2-P</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:57865731">57865731</a><span class="reference-accessdate">. Retrieved <span class="nowrap">21 April</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-graham-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-graham_72-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFGraham" class="citation web cs1"><a href="Paul_Graham_(computer_programmer)" class="mw-redirect" title="Paul Graham (computer programmer)">Graham, Paul</a>. <a rel="nofollow" class="external text" href="http://www.paulgraham.com/noop.html">"Why ARC isn't especially Object-Oriented"</a>. PaulGraham.com<span class="reference-accessdate">. Retrieved <span class="nowrap">13 November</span> 2009</span>.</cite></span>
</li>
<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><cite id="CITEREFFeldman2019" class="citation web cs1">Feldman, Richard (30 September 2019). <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=QyJZzq0v7Z4&t=2069s">"Why Isn't Functional Programming the Norm?"</a>. <i><a href="YouTube" title="YouTube">YouTube</a></i>.</cite></span>
</li>
<li id="cite_note-lawrence-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-lawrence_74-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKrubner" class="citation web cs1">Krubner, Lawrence. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141014233854/http://www.smashcompany.com/technology/object-oriented-programming-is-an-expensive-disaster-which-must-end">"Object Oriented Programming is an expensive disaster which must end"</a>. smashcompany.com. Archived from <a rel="nofollow" class="external text" href="http://www.smashcompany.com/technology/object-oriented-programming-is-an-expensive-disaster-which-must-end">the original</a> on 14 October 2014<span class="reference-accessdate">. Retrieved <span class="nowrap">14 October</span> 2014</span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li><cite id="CITEREFAbadiLuca_Cardelli1998" class="citation book cs1"><a href="Martin_Abadi" class="mw-redirect" title="Martin Abadi">Abadi, Martin</a>; <a href="Luca_Cardelli" title="Luca Cardelli">Luca Cardelli</a> (1998). <i>A Theory of Objects</i>. <a href="Springer_Verlag" class="mw-redirect" title="Springer Verlag">Springer Verlag</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-387-94775-4</bdi>.</cite></li>
<li><cite id="CITEREFAbelsonGerald_Jay_Sussman1997" class="citation book cs1"><a href="Harold_Abelson" class="mw-redirect" title="Harold Abelson">Abelson, Harold</a>; <a href="Gerald_Jay_Sussman" title="Gerald Jay Sussman">Gerald Jay Sussman</a> (1997). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20171226134539/http://mitpress.mit.edu/sicp/"><i>Structure and Interpretation of Computer Programs</i></a>. <a href="MIT_Press" title="MIT Press">MIT Press</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-262-01153-2</bdi>. Archived from <a rel="nofollow" class="external text" href="http://mitpress.mit.edu/sicp/">the original</a> on 26 December 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">22 January</span> 2006</span>.</cite></li>
<li><cite id="CITEREFArmstrong2006" class="citation journal cs1">Armstrong, Deborah J. (February 2006). "The Quarks of Object-Oriented Development". <i>Communications of the ACM</i>. <b>49</b> (2): <span class="nowrap">123–</span>128. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1113034.1113040">10.1145/1113034.1113040</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0001-0782">0001-0782</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:11485502">11485502</a>.</cite></li>
<li><cite id="CITEREFBloch2018" class="citation book cs1">Bloch, Joshua (2018). <i>"Effective Java: Programming Language Guide"</i> (third ed.). Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0134685991</bdi>.</cite></li>
<li><cite id="CITEREFBooch1997" class="citation book cs1"><a href="Grady_Booch" title="Grady Booch">Booch, Grady</a> (1997). <a rel="nofollow" class="external text" href="https://archive.org/details/objectorientedan00booc"><i>Object-Oriented Analysis and Design with Applications</i></a>. <a href="Addison-Wesley" title="Addison-Wesley">Addison-Wesley</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-8053-5340-2</bdi>.</cite></li>
<li><cite id="CITEREFEelesOliver_Sims1998" class="citation book cs1">Eeles, Peter; <a href="Oliver_Sims" title="Oliver Sims">Oliver Sims</a> (1998). <a rel="nofollow" class="external text" href="https://archive.org/details/buildingbusiness0000eele"><i>Building Business Objects</i></a>. <a href="John_Wiley_%26_Sons" class="mw-redirect" title="John Wiley & Sons">John Wiley & Sons</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-471-19176-6</bdi>.</cite></li>
<li><cite id="CITEREFGammaRichard_HelmRalph_JohnsonJohn_Vlissides1995" class="citation book cs1"><a href="Erich_Gamma" title="Erich Gamma">Gamma, Erich</a>; <a href="Richard_Helm" title="Richard Helm">Richard Helm</a>; <a href="Ralph_Johnson_(computer_scientist)" title="Ralph Johnson (computer scientist)">Ralph Johnson</a>; <a href="John_Vlissides" title="John Vlissides">John Vlissides</a> (1995). <a rel="nofollow" class="external text" href="https://archive.org/details/designpatternsel00gamm"><i>Design Patterns: Elements of Reusable Object Oriented Software</i></a>. Addison-Wesley. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1995dper.book.....G">1995dper.book.....G</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-63361-0</bdi>.</cite></li>
<li><cite id="CITEREFHarmonWilliam_Morrissey1996" class="citation book cs1"><a href="Paul_Harmon_(management_author)" title="Paul Harmon (management author)">Harmon, Paul</a>; William Morrissey (1996). <a rel="nofollow" class="external text" href="https://archive.org/details/objecttechnology00harm"><i>The Object Technology Casebook – Lessons from Award-Winning Business Applications</i></a>. John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-471-14717-6</bdi>.</cite></li>
<li><cite id="CITEREFJacobson1992" class="citation book cs1"><a href="Ivar_Jacobson" title="Ivar Jacobson">Jacobson, Ivar</a> (1992). <a href="Use_case" title="Use case"><i>Object-Oriented Software Engineering: A Use Case-Driven Approach</i></a>. Addison-Wesley. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1992oose.book.....J">1992oose.book.....J</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-54435-0</bdi>.</cite></li>
<li><cite id="CITEREFKay" class="citation book cs1"><a href="Alan_Kay" title="Alan Kay">Kay, Alan</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20050404075821/http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html"><i>The Early History of Smalltalk</i></a>. Archived from <a rel="nofollow" class="external text" href="http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.html">the original</a> on 4 April 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">18 April</span> 2005</span>.</cite></li>
<li><cite id="CITEREFMeyer1997" class="citation book cs1"><a href="Bertrand_Meyer" title="Bertrand Meyer">Meyer, Bertrand</a> (1997). <a rel="nofollow" class="external text" href="https://bertrandmeyer.com/OOSC2/"><i>Object-Oriented Software Construction</i></a>. <a href="Prentice_Hall" title="Prentice Hall">Prentice Hall</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-13-629155-8</bdi>.</cite></li>
<li><cite id="CITEREFPecinovsky2013" class="citation book cs1">Pecinovsky, Rudolf (2013). <a rel="nofollow" class="external text" href="http://pub.bruckner.cz/titles/oop"><i>OOP – Learn Object Oriented Thinking & Programming</i></a>. Bruckner Publishing. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-80-904661-8-0</bdi>.</cite></li>
<li><cite id="CITEREFRumbaughBlahaPremerlaniEddy1991" class="citation book cs1"><a href="James_Rumbaugh" title="James Rumbaugh">Rumbaugh, James</a>; Blaha, Michael; Premerlani, William; Eddy, Frederick; Lorensen, William (1991). <a rel="nofollow" class="external text" href="https://archive.org/details/objectorientedmo00rumb"><i>Object-Oriented Modeling and Design</i></a>. Prentice Hall. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-13-629841-0</bdi>.</cite></li>
<li><cite id="CITEREFSchach2006" class="citation book cs1">Schach, Stephen (2006). <i>Object-Oriented and Classical Software Engineering, Seventh Edition</i>. <a href="McGraw-Hill" class="mw-redirect" title="McGraw-Hill">McGraw-Hill</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-07-319126-3</bdi>.</cite></li>
<li><cite id="CITEREFSchreiner1993" class="citation book cs1">Schreiner, Axel-Tobias (1993). <i>Object oriented programming with ANSI-C</i>. Hanser. <a href="Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<a rel="nofollow" class="external text" href="https://hdl.handle.net/1850%2F8544">1850/8544</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-446-17426-9</bdi>.</cite></li>
<li><cite id="CITEREFTaylor1992" class="citation book cs1">Taylor, David A. (1992). <a rel="nofollow" class="external text" href="https://archive.org/details/objectorientedin00tayl"><i>Object-Oriented Information Systems – Planning and Implementation</i></a>. John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-471-54364-0</bdi>.</cite></li>
<li><cite id="CITEREFWeisfeld2009" class="citation book cs1">Weisfeld, Matt (2009). <i>The Object-Oriented Thought Process, Third Edition</i>. <a href="Addison-Wesley" title="Addison-Wesley">Addison-Wesley</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-672-33016-2</bdi>.</cite></li>
<li><cite id="CITEREFWest2004" class="citation book cs1">West, David (2004). <i>Object Thinking (Developer Reference)</i>. <a href="Microsoft_Press" title="Microsoft Press">Microsoft Press</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-7356-1965-4</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */
.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */
@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}
/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}
/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikiquote has quotations related to <i><b><a href="https://en.wikiquote.org/wiki/Object-orientation" class="extiw external" title="q:Object-orientation">Object-orientation</a></b></i>.</div></div>
</div>
<div class="side-box side-box-right sistersitebox">
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikiversity has learning resources about <i><b><a href="https://en.wikiversity.org/wiki/Special:Search/Object-oriented_programming" class="extiw external" title="v:Special:Search/Object-oriented programming">Object-oriented programming</a></b></i> at <div style="margin-left: 10px;"><a href="https://en.wikiversity.org/wiki/Topic:Object-Oriented_Programming" class="extiw external" title="v:Topic:Object-Oriented Programming">Topic:Object-Oriented Programming</a></div></div></div>
</div>
<div class="side-box side-box-right sistersitebox">
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikibooks has a book on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/Object_Oriented_Programming" class="extiw external" title="wikibooks:Object Oriented Programming">Object Oriented Programming</a></b></i></div></div>
</div>
<ul><li><a rel="nofollow" class="external text" href="http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep">Introduction to Object Oriented Programming Concepts (OOP) and More</a> by L.W.C. Nirosh</li>
<li><a rel="nofollow" class="external text" href="https://thenewstack.io/why-are-so-many-developers-hating-on-object-oriented-programming/">Discussion on Cons of OOP</a></li>
<li><a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/tutorial/java/concepts/">OOP Concepts (Java Tutorials)</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Programming_paradigms_(Comparison_by_language)368" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Programming_paradigms_(Comparison_by_language)368" style="font-size:114%;margin:0 4em"><a href="Programming_paradigm" title="Programming paradigm">Programming paradigms</a> (<a href="Comparison_of_multi-paradigm_programming_languages" title="Comparison of multi-paradigm programming languages">Comparison by language</a>)</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Imperative_programming" title="Imperative programming">Imperative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Structured_programming" title="Structured programming">Structured</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Jackson_structured_programming" title="Jackson structured programming">Jackson structures</a></li>
<li><a href="Block_(programming)" title="Block (programming)">Block-structured</a></li>
<li><a href="Modular_programming" title="Modular programming">Modular</a></li>
<li><a href="Non-structured_programming" title="Non-structured programming">Non-structured</a></li>
<li><a href="Procedural_programming" title="Procedural programming">Procedural</a></li>
<li><a href="Programming_in_the_large_and_programming_in_the_small" title="Programming in the large and programming in the small">Programming in the large and in the small</a></li>
<li><a href="Design_by_contract" title="Design by contract">Design by contract</a></li>
<li><a href="Invariant-based_programming" title="Invariant-based programming">Invariant-based</a></li>
<li><a href="Nested_function" title="Nested function">Nested function</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><br>(<a href="Comparison_of_programming_languages_(object-oriented_programming)" title="Comparison of programming languages (object-oriented programming)">comparison</a>, <a href="List_of_object-oriented_programming_languages" title="List of object-oriented programming languages">list</a>)</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Class-based_programming" title="Class-based programming">Class-based</a>, <a href="Prototype-based_programming" title="Prototype-based programming">Prototype-based</a>, <a href="Object-based_language" title="Object-based language">Object-based</a></li>
<li><a href="Agent-oriented_programming" title="Agent-oriented programming">Agent</a></li>
<li><a href="Immutable_object" title="Immutable object">Immutable object</a></li>
<li><a href="Persistent_programming_language" title="Persistent programming language">Persistent</a></li>
<li><a href="Uniform_function_call_syntax" title="Uniform function call syntax">Uniform function call syntax</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Declarative_programming" title="Declarative programming">Declarative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Functional_programming" title="Functional programming">Functional</a><br>(<a href="Comparison_of_functional_programming_languages" title="Comparison of functional programming languages">comparison</a>)</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Recursion_(computer_science)" title="Recursion (computer science)">Recursive</a></li>
<li><a href="Anonymous_function" title="Anonymous function">Anonymous function</a> (<a href="Partial_application" title="Partial application">Partial application</a>)</li>
<li><a href="Higher-order_programming" title="Higher-order programming">Higher-order</a></li>
<li><a href="Purely_functional_programming" title="Purely functional programming">Purely functional</a></li>
<li><a href="Total_functional_programming" title="Total functional programming">Total</a></li>
<li><a href="Strict_programming_language" title="Strict programming language">Strict</a></li>
<li><a href="Generalized_algebraic_data_type" title="Generalized algebraic data type">GADTs</a></li>
<li><a href="Dependent_type" title="Dependent type">Dependent types</a></li>
<li><a href="Functional_logic_programming" title="Functional logic programming">Functional logic</a></li>
<li><a href="Tacit_programming" title="Tacit programming">Point-free style</a></li>
<li><a href="Expression-oriented_programming_language" title="Expression-oriented programming language">Expression-oriented</a></li>
<li><a href="Applicative_programming_language" title="Applicative programming language">Applicative</a>, <a href="Concatenative_programming_language" title="Concatenative programming language">Concatenative</a></li>
<li><a href="Function-level_programming" title="Function-level programming">Function-level</a>, <a href="Value-level_programming" title="Value-level programming">Value-level</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Dataflow_programming" title="Dataflow programming">Dataflow</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Flow-based_programming" title="Flow-based programming">Flow-based</a></li>
<li><a href="Reactive_programming" title="Reactive programming">Reactive</a> (<a href="Functional_reactive_programming" title="Functional reactive programming">Functional reactive</a>)</li>
<li><a href="Signal_programming" class="mw-redirect" title="Signal programming">Signals</a></li>
<li><a href="Stream_processing" title="Stream processing">Streams</a></li>
<li><a href="Synchronous_programming_language" title="Synchronous programming language">Synchronous</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Logic_programming" title="Logic programming">Logic</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Abductive_logic_programming" title="Abductive logic programming">Abductive logic</a></li>
<li><a href="Answer_set_programming" title="Answer set programming">Answer set</a></li>
<li><a href="Constraint_programming" title="Constraint programming">Constraint</a> (<a href="Constraint_logic_programming" title="Constraint logic programming">Constraint logic</a>)</li>
<li><a href="Inductive_logic_programming" title="Inductive logic programming">Inductive logic</a></li>
<li><a href="Nondeterministic_programming" title="Nondeterministic programming">Nondeterministic</a></li>
<li><a href="Ontology_language" title="Ontology language">Ontology</a></li>
<li><a href="Probabilistic_logic_programming" title="Probabilistic logic programming">Probabilistic logic</a></li>
<li><a href="Query_language" title="Query language">Query</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Domain-specific_language" title="Domain-specific language">DSL</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Algebraic_modeling_language" title="Algebraic modeling language">Algebraic modeling</a></li>
<li><a href="Array_programming" title="Array programming">Array</a></li>
<li><a href="Automata-based_programming" title="Automata-based programming">Automata-based</a> (<a href="Action_language" title="Action language">Action</a>)</li>
<li><a href="Command_language" title="Command language">Command</a> (<a href="Spacecraft_command_language" title="Spacecraft command language">Spacecraft</a>)</li>
<li><a href="Differentiable_programming" title="Differentiable programming">Differentiable</a></li>
<li><a href="End-user_development" title="End-user development">End-user</a></li>
<li><a href="Grammar-oriented_programming" title="Grammar-oriented programming">Grammar-oriented</a></li>
<li><a href="Interface_description_language" title="Interface description language">Interface description</a></li>
<li><a href="Language-oriented_programming" title="Language-oriented programming">Language-oriented</a></li>
<li><a href="List_comprehension" title="List comprehension">List comprehension</a></li>
<li><a href="Low-code_development_platform" title="Low-code development platform">Low-code</a></li>
<li><a href="Modeling_language" title="Modeling language">Modeling</a></li>
<li><a href="Natural-language_programming" class="mw-redirect" title="Natural-language programming">Natural language</a></li>
<li><a href="Non-English-based_programming_languages" title="Non-English-based programming languages">Non-English-based</a></li>
<li><a href="Page_description_language" title="Page description language">Page description</a></li>
<li><a href="Pipeline_(software)" title="Pipeline (software)">Pipes</a> and <a href="Filter_(software)" title="Filter (software)">filters</a></li>
<li><a href="Probabilistic_programming" title="Probabilistic programming">Probabilistic</a></li>
<li><a href="Quantum_programming" title="Quantum programming">Quantum</a></li>
<li><a href="Scientific_programming_language" title="Scientific programming language">Scientific</a></li>
<li><a href="Scripting_language" title="Scripting language">Scripting</a></li>
<li><a href="Set_theoretic_programming" title="Set theoretic programming">Set-theoretic</a></li>
<li><a href="Simulation_language" title="Simulation language">Simulation</a></li>
<li><a href="Stack-oriented_programming" title="Stack-oriented programming">Stack-based</a></li>
<li><a href="System_programming_language" title="System programming language">System</a></li>
<li><a href="Tactile_programming_language" title="Tactile programming language">Tactile</a></li>
<li><a href="Template_processor" title="Template processor">Templating</a></li>
<li><a href="Transformation_language" title="Transformation language">Transformation</a> (<a href="Graph_rewriting" title="Graph rewriting">Graph rewriting</a>, <a href="Production_system_(computer_science)" title="Production system (computer science)">Production</a>, <a href="Pattern_matching" title="Pattern matching">Pattern</a>)</li>
<li><a href="Visual_programming_language" title="Visual programming language">Visual</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Concurrent_computing" title="Concurrent computing">Concurrent</a>,<br><a href="Distributed_computing" title="Distributed computing">distributed</a>,<br><a href="Parallel_computing" title="Parallel computing">parallel</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Actor_model" title="Actor model">Actor-based</a></li>
<li><a href="Automatic_mutual_exclusion" title="Automatic mutual exclusion">Automatic mutual exclusion</a></li>
<li><a href="Choreographic_programming" title="Choreographic programming">Choreographic programming</a></li>
<li><a href="Concurrent_logic_programming" title="Concurrent logic programming">Concurrent logic</a> (<a href="Concurrent_constraint_logic_programming" title="Concurrent constraint logic programming">Concurrent constraint logic</a>)</li>
<li><a href="Concurrent_object-oriented_programming" title="Concurrent object-oriented programming">Concurrent OO</a></li>
<li><a href="Macroprogramming" title="Macroprogramming">Macroprogramming</a></li>
<li><a href="Multitier_programming" title="Multitier programming">Multitier programming</a></li>
<li><a href="Organic_computing" title="Organic computing">Organic computing</a></li>
<li><a href="Parallel_programming_model" title="Parallel programming model">Parallel programming models</a></li>
<li><a href="Partitioned_global_address_space" title="Partitioned global address space">Partitioned global address space</a></li>
<li><a href="Process-oriented_programming" title="Process-oriented programming">Process-oriented</a></li>
<li><a href="Relativistic_programming" title="Relativistic programming">Relativistic programming</a></li>
<li><a href="Service-oriented_programming" title="Service-oriented programming">Service-oriented</a></li>
<li><a href="Structured_concurrency" title="Structured concurrency">Structured concurrency</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Metaprogramming" title="Metaprogramming">Metaprogramming</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Attribute-oriented_programming" title="Attribute-oriented programming">Attribute-oriented</a></li>
<li><a href="Automatic_programming" title="Automatic programming">Automatic</a> (<a href="Inductive_programming" title="Inductive programming">Inductive</a>)</li>
<li><a href="Dynamic_programming_language" title="Dynamic programming language">Dynamic</a></li>
<li><a href="Extensible_programming" title="Extensible programming">Extensible</a></li>
<li><a href="Generic_programming" title="Generic programming">Generic</a></li>
<li><a href="Homoiconicity" title="Homoiconicity">Homoiconicity</a></li>
<li><a href="Interactive_programming" title="Interactive programming">Interactive</a></li>
<li><a href="Macro_(computer_science)" title="Macro (computer science)">Macro</a> (<a href="Hygienic_macro" title="Hygienic macro">Hygienic</a>)</li>
<li><a href="Metalinguistic_abstraction" title="Metalinguistic abstraction">Metalinguistic abstraction</a></li>
<li><a href="Multi-stage_programming" title="Multi-stage programming">Multi-stage</a></li>
<li><a href="Program_synthesis" title="Program synthesis">Program synthesis</a> (<a href="Bayesian_program_synthesis" title="Bayesian program synthesis">Bayesian</a>, <a href="Inferential_programming" title="Inferential programming">Inferential</a>, <a href="Programming_by_demonstration" title="Programming by demonstration">by demonstration</a>, <a href="Programming_by_example" title="Programming by example">by example</a>)</li>
<li><a href="Reflective_programming" title="Reflective programming">Reflective</a></li>
<li><a href="Self-modifying_code" title="Self-modifying code">Self-modifying code</a></li>
<li><a href="Symbolic_programming" title="Symbolic programming">Symbolic</a></li>
<li><a href="Template_metaprogramming" title="Template metaprogramming">Template</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Separation_of_concerns" title="Separation of concerns">Separation<br>of concerns</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Aspect-oriented_programming" title="Aspect-oriented programming">Aspects</a></li>
<li><a href="Component-based_software_engineering" title="Component-based software engineering">Components</a></li>
<li><a href="Data-driven_programming" title="Data-driven programming">Data-driven</a></li>
<li><a href="Data-oriented_design" title="Data-oriented design">Data-oriented</a></li>
<li><a href="Event-driven_programming" title="Event-driven programming">Event-driven</a></li>
<li><a href="Feature-oriented_programming" title="Feature-oriented programming">Features</a></li>
<li><a href="Literate_programming" title="Literate programming">Literate</a></li>
<li><a href="Role-oriented_programming" title="Role-oriented programming">Roles</a></li>
<li><a href="Subject-oriented_programming" title="Subject-oriented programming">Subjects</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Types_of_programming_languages107" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Types_of_programming_languages107" style="font-size:114%;margin:0 4em"><a href="Programming_paradigm" title="Programming paradigm">Types of programming languages</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Level</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Machine_code" title="Machine code">Machine</a></li>
<li><a href="Assembly_language" title="Assembly language">Assembly</a></li>
<li><a href="Compiled_language" title="Compiled language">Compiled</a></li>
<li><a href="Interpreted_language" class="mw-redirect" title="Interpreted language">Interpreted</a></li></ul>
<ul><li><a href="Low-level_programming_language" title="Low-level programming language">Low-level</a></li>
<li><a href="High-level_programming_language" title="High-level programming language">High-level</a></li>
<li><a href="Very_high-level_programming_language" title="Very high-level programming language">Very high-level</a></li>
<li><a href="Esoteric_programming_language" title="Esoteric programming language">Esoteric</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language_generations" title="Programming language generations">Generation</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="First-generation_programming_language" title="First-generation programming language">First</a></li>
<li><a href="Second-generation_programming_language" title="Second-generation programming language">Second</a></li>
<li><a href="Third-generation_programming_language" title="Third-generation programming language">Third</a></li>
<li><a href="Fourth-generation_programming_language" title="Fourth-generation programming language">Fourth</a></li>
<li><a href="Fifth-generation_programming_language" title="Fifth-generation programming language">Fifth</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Software_engineering336" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Software_engineering336" style="font-size:114%;margin:0 4em"><a href="Software_engineering" title="Software engineering">Software engineering</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Fields</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Computer_programming" title="Computer programming">Computer programming</a></li>
<li><a href="DevOps" title="DevOps">DevOps</a></li>
<li><a href="Empirical_software_engineering" title="Empirical software engineering">Empirical software engineering</a></li>
<li><a href="Experimental_software_engineering" title="Experimental software engineering">Experimental software engineering</a></li>
<li><a href="Formal_methods" title="Formal methods">Formal methods</a></li>
<li><a href="Requirements_engineering" title="Requirements engineering">Requirements engineering</a></li>
<li><a href="Search-based_software_engineering" title="Search-based software engineering">Search-based software engineering</a></li>
<li><a href="Site_reliability_engineering" title="Site reliability engineering">Site reliability engineering</a></li>
<li><a href="Social_software_engineering" title="Social software engineering">Social software engineering</a></li>
<li><a href="Software_deployment" title="Software deployment">Software deployment</a></li>
<li><a href="Software_design" title="Software design">Software design</a></li>
<li><a href="Software_maintenance" title="Software maintenance">Software maintenance</a></li>
<li><a href="Software_testing" title="Software testing">Software testing</a></li>
<li><a href="Systems_analysis" title="Systems analysis">Systems analysis</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Concepts</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Abstraction_(computer_science)" title="Abstraction (computer science)">Abstraction</a></li>
<li><a href="CI/CD" title="CI/CD">CI/CD</a></li>
<li><a href="Computer_compatibility" title="Computer compatibility">Compatibility</a>
<ul><li><a href="Backward_compatibility" title="Backward compatibility">Backward compatibility</a></li>
<li><a href="Compatibility_layer" title="Compatibility layer">Compatibility layer</a></li>
<li><a href="Compatibility_mode" title="Compatibility mode">Compatibility mode</a></li>
<li><a href="Forward_compatibility" title="Forward compatibility">Forward compatibility</a></li>
<li><a href="Software_incompatibility" title="Software incompatibility">Software incompatibility</a></li></ul></li>
<li><a href="Component-based_software_engineering" title="Component-based software engineering">Component-based software engineering</a></li>
<li><a href="Data_modeling" title="Data modeling">Data modeling</a></li>
<li><a href="Enterprise_architecture" title="Enterprise architecture">Enterprise architecture</a></li>
<li><a href="Functional_specification" title="Functional specification">Functional specification</a></li>
<li><a href="Modeling_language" title="Modeling language">Modeling language</a></li>
<li><a href="Programming_paradigm" title="Programming paradigm">Programming paradigm</a></li>
<li><a href="Software" title="Software">Software</a></li>
<li><a href="Software_archaeology" title="Software archaeology">Software archaeology</a></li>
<li><a href="Software_architecture" title="Software architecture">Software architecture</a></li>
<li><a href="Software_configuration_management" title="Software configuration management">Software configuration management</a></li>
<li><a href="Software_development_process" title="Software development process">Software development process/methodology</a></li>
<li><a href="Software_quality" title="Software quality">Software quality</a></li>
<li><a href="Software_quality_assurance" title="Software quality assurance">Software quality assurance</a></li>
<li><a href="Software_system" title="Software system">Software system</a></li>
<li><a href="Software_verification_and_validation" title="Software verification and validation">Software verification and validation</a></li>
<li><a href="Structured_analysis" title="Structured analysis">Structured analysis</a>
<ul><li><a href="Essential_systems_analysis" title="Essential systems analysis">Essential analysis</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Orientations</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Agile_software_development" title="Agile software development">Agile</a></li>
<li><a href="Aspect-oriented_programming" title="Aspect-oriented programming">Aspect-oriented</a></li>
<li><a href="Ontology_(information_science)" title="Ontology (information science)">Ontology</a></li>
<li><a href="Systems_development_life_cycle" title="Systems development life cycle">SDLC</a></li>
<li><a href="Service-oriented_architecture" title="Service-oriented architecture">Service orientation</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Models</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Developmental</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Agile_software_development" title="Agile software development">Agile</a></li>
<li><a href="Enterprise_unified_process" title="Enterprise unified process">EUP</a></li>
<li><a href="Executable_UML" title="Executable UML">Executable UML</a></li>
<li><a href="Incremental_build_model" title="Incremental build model">Incremental model</a></li>
<li><a href="Iterative_and_incremental_development" title="Iterative and incremental development">Iterative model</a></li>
<li><a href="Software_prototyping" title="Software prototyping">Prototype model</a></li>
<li><a href="Rapid_application_development" title="Rapid application development">RAD</a></li>
<li><a href="Scrum_(software_development)" title="Scrum (software development)">Scrum</a></li>
<li><a href="Spiral_model" title="Spiral model">Spiral model</a></li>
<li><a href="Unified_process" title="Unified process">UP</a></li>
<li><a href="V-model_(software_development)" title="V-model (software development)">V-model</a></li>
<li><a href="Waterfall_model" title="Waterfall model">Waterfall model</a></li>
<li><a href="Extreme_programming" title="Extreme programming">XP</a></li>
<li><a href="Model-driven_engineering" title="Model-driven engineering">Model-driven engineering</a></li>
<li><a href="Round-trip_engineering" title="Round-trip engineering">Round-trip engineering</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Other</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Capability_Maturity_Model_Integration" title="Capability Maturity Model Integration">CMMI</a></li>
<li><a href="Data_model" title="Data model">Data model</a></li>
<li><a href="Entity%E2%80%93relationship_model" title="Entity–relationship model">ER model</a></li>
<li><a href="Function_model" title="Function model">Function model</a></li>
<li><a href="Information_model" title="Information model">Information model</a></li>
<li><a href="Metamodeling" title="Metamodeling">Metamodeling</a></li>
<li><a href="Object_model" title="Object model">Object model</a></li>
<li><a href="ISO/IEC_15504" title="ISO/IEC 15504">SPICE</a></li>
<li><a href="Systems_modeling" title="Systems modeling">Systems model</a></li>
<li><a href="View_model" title="View model">View model</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Languages</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="IDEF" title="IDEF">IDEF</a></li>
<li><a href="Systems_modeling_language" title="Systems modeling language">SysML</a></li>
<li><a href="Unified_Modeling_Language" title="Unified Modeling Language">UML</a></li>
<li><a href="Universal_Systems_Language" title="Universal Systems Language">USL</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Systems_design" title="Systems design">Systems design</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Software_requirements_specification" title="Software requirements specification"> Requirements</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Functional_requirement" title="Functional requirement">Functional requirement</a></li>
<li><a href="Non-functional_requirement" title="Non-functional requirement">Non-functional requirement</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Capacity_planning" title="Capacity planning"> Capacity</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Active_users" title="Active users"> Users</a></li>
<li><a href="Central_processing_units" class="mw-redirect" title="Central processing units"> Compute</a></li>
<li><a href="Computer_memory" title="Computer memory"> Memory</a></li>
<li><a href="Computer_data_storage" title="Computer data storage"> Storage</a></li>
<li><a href="Bandwidth_(computing)" title="Bandwidth (computing)"> Network</a></li>
<li><a href="Web_traffic" title="Web traffic">Web traffic</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Interface_(computing)" title="Interface (computing)"> Interface</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="API" title="API">API</a></li>
<li><a href="SOAP" title="SOAP">SOAP</a></li>
<li><a href="REST" title="REST">REST</a></li>
<li><a href="GraphQL" title="GraphQL">GraphQL</a></li>
<li><a href="GRPC" title="GRPC">gRPC</a></li>
<li><a href="Webhook" title="Webhook">Webhook</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="High-level_design" title="High-level design">High-level design</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Client_(computing)" title="Client (computing)"> Client</a></li>
<li><a href="Load_balancing_(computing)" title="Load balancing (computing)"> Load balancing</a></li>
<li><a href="Application_server" title="Application server">Application server</a></li>
<li><a href="Message_queue" title="Message queue">Message queue</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="System_Integration" class="mw-redirect" title="System Integration"> Integration</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Vertical_integration" title="Vertical integration"> Vertical</a></li>
<li><a href="Peer-to-peer" title="Peer-to-peer">Peer-to-peer</a></li>
<li><a href="API_management" title="API management"> API Gateway</a></li>
<li><a href="Publish%E2%80%93subscribe_pattern" title="Publish–subscribe pattern"> pub-sub</a></li>
<li><a href="Event_store" title="Event store"> Event Source</a></li>
<li><a href="Extract%2C_transform%2C_load" title="Extract, transform, load"> ETL</a></li>
<li><a href="Batch_processing" title="Batch processing"> Batch</a></li>
<li><a href="Stream_processing" title="Stream processing">Stream</a></li>
<li><a href="Orchestration_(computing)" title="Orchestration (computing)"> Orchestration</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Architectures" class="mw-redirect" title="Architectures">Architectures</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Monolithic_application" title="Monolithic application"> Monolithic</a></li>
<li><a href="Microservices" title="Microservices">Microservices</a></li>
<li><a href="Event-driven_architecture" title="Event-driven architecture"> Event-Driven</a></li>
<li><a href="Client%E2%80%93server_model" title="Client–server model"> Client–server</a></li>
<li><a href="Serverless_computing" title="Serverless computing"> Serverless</a></li>
<li><a href="Circuit_breaker_design_pattern" title="Circuit breaker design pattern"> Circuit breaker</a></li>
<li><a href="Rate_limiting" title="Rate limiting">Rate limiting</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Database" title="Database">Database</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Relational_database" title="Relational database"> Relational</a></li>
<li><a href="NoSQL" title="NoSQL">NoSQL</a></li>
<li><a href="Graph_database" title="Graph database"> Graph</a></li>
<li><a href="Key%E2%80%93value_database" title="Key–value database"> Key–value</a></li>
<li><a href="Log-structured_merge-tree" title="Log-structured merge-tree"> LSM Tree </a></li>
<li><a href="Time_series_database" title="Time series database"> Time series</a></li>
<li><a href="Data_orientation" title="Data orientation"> Column Oriented</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Systems_design" title="Systems design"> Principles</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Consistency_(database_systems)" title="Consistency (database systems)">Consistency</a></li>
<li><a href="Reliability_engineering" title="Reliability engineering">Reliability</a></li>
<li><a href="CAP_theorem" title="CAP theorem">CAP theorem</a></li>
<li><a href="Software_maintenance" title="Software maintenance"> Maintainability</a></li>
<li><a href="Computer_configuration" title="Computer configuration"> Configurability</a></li>
<li><a href="Modularity" title="Modularity">Modularity</a></li>
<li><a href="Durability_(database_systems)" title="Durability (database systems)"> Durability</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Scalability" title="Scalability">Scalability</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Service_statelessness_principle" title="Service statelessness principle"> Stateless</a></li>
<li><a href="Asynchronous_I/O" title="Asynchronous I/O">Asynchronous I/O</a></li>
<li><a href="Loose_coupling" title="Loose coupling">Loose coupling</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Availability" title="Availability">Availability</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Fault_tolerance" title="Fault tolerance">Fault tolerance</a></li>
<li><a href="Failover" title="Failover">Failover</a></li>
<li><a href="Single_point_of_failure" title="Single point of failure">Single point of failure</a></li>
<li><a href="Replication_(computing)" title="Replication (computing)"> Replication</a></li>
<li><a href="Consistent_hashing" title="Consistent hashing">Consistent hashing</a></li>
<li><a href="Circuit_breaker_design_pattern" title="Circuit breaker design pattern"> Circuit breaker</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Latency_(engineering)" title="Latency (engineering)">Latency</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Cache_(computing)" title="Cache (computing)"> Cache</a></li>
<li><a href="Content_delivery_network" title="Content delivery network"> CDN</a></li>
<li><a href="Shard_(database_architecture)" title="Shard (database architecture)"> Shard </a></li>
<li><a href="Database_index" title="Database index">Database index</a></li>
<li><a href="Cache_prefetching" title="Cache prefetching"> Pre-caching</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Computer_data_storage" title="Computer data storage"> Storage</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Object_storage" title="Object storage">Object storage</a></li>
<li><a href="Block-level_storage" title="Block-level storage"> Block storage</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;"><a href="Observability_(software)" title="Observability (software)"> Observability</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Logging_(computing)" title="Logging (computing)"> Logging</a></li>
<li><a href="Software_metric" title="Software metric"> Metrics</a></li>
<li><a href="Tracing_(software)" title="Tracing (software)"> Tracing </a></li>
<li><a href="Failure_rate" title="Failure rate"> Error rate </a></li>
<li><a href="Queries_per_second" title="Queries per second">Queries per second </a></li>
<li><a href="Notification_system" title="Notification system">Notification system</a></li>
<li><a href="Anomaly_detection" title="Anomaly detection">Anomaly detection</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related fields</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Computer_engineering" title="Computer engineering">Computer engineering</a></li>
<li><a href="Computer_science" title="Computer science">Computer science</a></li>
<li><a href="Information_science" title="Information science">Information science</a></li>
<li><a href="Project_management" title="Project management">Project management</a></li>
<li><a href="Risk_management" title="Risk management">Risk management</a></li>
<li><a href="Systems_engineering" title="Systems engineering">Systems engineering</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold;"><div>
<ul><li><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> Category</li>
<li><span class="noviewer" typeof="mw:File"><span title="Commons page"></span></span> <a href="https://commons.wikimedia.org/wiki/Category:Software_engineering" class="extiw external" title="commons:Category:Software engineering">Commons</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1038841319">
/* start https://en.wikipedia.org/ */
.mw-parser-output .tooltip-dotted{border-bottom:1px dotted;cursor:help}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox authority-control" aria-labelledby="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q79872#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata1440" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q79872#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata1440" style="font-size:114%;margin:0 4em">Authority control databases </div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">International</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.worldcat.org/fast/1042804">FAST</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">National</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4233947-9">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh87007503">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb12115131k">France</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb12115131k">BnF data</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.ndl.go.jp/auth/ndlna/00937980">Japan</a></span></li><li><span class="uid"><span class="rt-commentedText tooltip tooltip-dotted" title="objektově orientované programování"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph115529&CON_LNG=ENG">Czech Republic</a></span></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://datos.bne.es/resource/XX537453">Spain</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007539278305171">Israel</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://lux.collections.yale.edu/view/concept/2616bdd5-359f-401f-b1c0-fadd8364b06d">Yale LUX</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-08-07" href="https://en.wikipedia.org/wiki/?title=Object-oriented_programming&oldid=1304683293">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>